排序算法不好理解?那就来个 GUI 的!
上篇C语言实现各排序算法的完成,使得自己对排序有了一定的了解,最近看到一个 iOS 图形化排序过程,因此今天就完成 Android 端的图形化排序过程。
排序算法实现很简单,其重点是要实现安卓 View 跟随排序的动态变化。
由于计算机执行排序算法的高效性,对一定数量的数组排序都是 毫秒级 的,因此我们要考虑 放大排序时间,给可视化界面完整的动态过程。
面试官:“ 先手写一个快速排序吧!”
最近整理了一些排序算法,并记录下实现过程!作为备忘笔记。主要有:快速排序、堆排序、归并排序、插入排序、冒泡排序、选择排序等。
C
作为实现语言,主要是本人在看 Linux
下的 C 编程一书,于是就顺便直接在 Linux 系统下开写了!我想 C 语言是每个人都能看得懂的语言,并且其特殊性很少,几乎完全能转化为其他各式语言 ( Java
, Php
, Python
等 ),因此这也是 C 的好处。快速排序是 C.R.A.Hoare 于 1962 年提出的一种划分交换排序方法,其核心是分治法。
实现过程:
从数列中选取一个作为 基准数 ( 不妨就选第一个,通常也都是选择第一个 );然后进行分区,将比它小的数放在它左边,比其大的则放在右边;然后对 左右区间进行相同操作 ( 也就是递归 ),直到各个区间只剩一个数。
本文不提供翻墙服务,只作为技术交流教程!
2025.1.09号更新: 最新稳定翻墙服务:高速代理翻墙,支持全球28多个国家,4K流媒体秒播,支持奈飞GPT等流媒体。
2024.6.16号更新: 不用买服务器,利用 Cloudflare 搭建免费翻墙服务,流畅访问 Youtube、ChatGPT、Netflix。
2019-6-16更新:今年 6 月初,搬瓦工大面积瘫痪被墙,最近一直在测试其他方法,本文也有点臃肿了,因此,新的服务说明写在新的博客页上:https://jiyiren.github.io/2019/06/16/justmysocks/ 希望能帮到大家。
下面为旧文:
作为程序员,访问谷歌搜索引擎以及 StackOverFlow 还有很多技术站点是常事!
之前一直用 免费 的 XXNet 翻墙,但最近还是网络不稳定,有些国外网站并不能访问。于是于是今天想自己搭建属于自己的翻墙服务器。
2019-5-30更新:鉴于搬瓦工越来越贵,操作还越来越不方便。我同学用了另外一个翻墙服务的,他说用的还不错,价格如下图。官网网址:https://www.ysscloud.co.uk, 订购过程我就不讲了,这个网站订购简单,注册账号就可以购买,并且账号自动给你。另外可以更换 IP。(如果有新的网址我再更新上来,希望能帮到大家)。
2019-4-28更新:现在最新搬瓦工里购买的服务,即使通过 问题解决里的 后台控制界面没有 Shadowsocks Server 选项? 解决方法也找不到一键安装 Shadowsocks 服务的页面了。但是假如自己的账号以前是可以的,那么现在依旧可以看到,但最新购买的服务则是没有的了。这种情况只能自己手动安装 Shadowsocks 服务了。这个需要具有一些计算机方面的基础才较好操作。
同步学习,才能不落伍
最近好好整理下 Java
方面的知识点,在练习到线程方面时,对同步方面的知识还是模糊不清的,于是开学今天好好地看了相关博客,下面仅仅记录下以备以后参考查询!
首先我们先了解下什么是 同步、异步 与 synchronzied:
同步:在计算机领域,指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去!
异步:是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
synchronized: 是 Java
中的关键词,其意思也是同步,其主要用在多线程中需要同步的情况下!
依赖倒置原则(Dependence Inversion Principle ,DIP):高层模块不应该依赖低层模块,应该依赖其抽象,抽象不应该依赖其细节,细节应该依赖其抽象。
理解:低层模块:具体细化的 Java 类。高层模块:是由多个低层模块组成的。抽象:指的是接口或者抽象类。依赖:存在类 A 的一个方法 S, S 传入的参数是另一个类 B 的实例,那么类 A 依赖于类 B, 也就是类 A 中引用了类 B, 则 A 依赖 B, 因为 A 类中缺少了 B 类就无法正常运行了!
先举一个反例子:一个司机开宝马车。正常思维是定义一个司机类 Driver, 并实现一个开车 void drive(BMWCar bmwcar)
的方法,该方法传入的是宝马车的一个实例!
本篇文章是最近看了设计模式方面的知识,记录下自己的阅读内容以及笔记,以备以后翻录!
单一职责原则( Single Responsibility Principle ):指有且仅有一个原因引起类的变更。
理解:尽可能的将对象划分成单一性的类别,使类的复杂性降低,实现什么职责都有清晰明确的定义。
MySQL 入坑指南
本篇文章主要记录自己在使用配置 MySQL 过程中的注意点和配置流程,因为自己常常帮别人配置 MySQL 环境,但是每次都需要重新查看下资料,我就自己记录下,为快速配置 MySQL 环境而节省时间。
个人建议选择zip包安装,这样Windows和Linux下配置过程很相似
5.7 或者最新版官网地址:http://dev.mysql.com/downloads/mysql/
5.6 版本百度云地址:http://pan.baidu.com/s/1b6hLCE
这里还要讲下有的下载的 5.7 版本 里面没有 data 目录,这个常常会导致安装失败,建议下载压缩包后解压看看里面有没有 data 目录,选择有 data 目录 的压缩包安装较好,如果没有可以从以前或者别人的目录里拷贝,上面百度云里的 5.6 版本 是有的。
MySQL 5 开启定时任务
最近项目里面的后台需要用到定时任务,而 MySQL 从 5.0 开始自带了定时事件操作,所以学习下并做下记录。
后台周期定时任务可以有多种解决方案,我所知道的大概有以下几种:
(1). 后台框架自带定时任务。比如 Php 中的 Laravel 框架里有提供定时任务操作接口,其他的框架大家可以单独针对了解。
(2). 服务器操作系统层面的定时。通常我们的服务器主要基于两大平台,一个 Windows Server, 它的定时任务系统有提供的。Linux 下也有,通常流行的是 crontab
工具实现的 ( 想了解这里有个 视频教程 ), 但是 crontab
的定时任务通常定时操作脚本这样的文件,而直接定时操作数据库的就比较麻烦了。但是也有解决办法,就是在服务器端写一个 get
请求 url
,在后台里完成要定时完成的数据库操作,这样我们只要实现定时访问该接口就行了,Linux 下的 curl
命令可以很方便发出 get
请求,我们只要写个包含访问该接口的脚本,再结合 crontab
就可以完成后台数据的定时更新操作了。
(3). 但是毕竟写个接口安全性不是太高,而大家用的如果是 MySQL 数据库,那就正好可以利用其自带的定时操作了,下面简单介绍 MySQL 定时操作的使用。
Struts2 作为传统 WebWork 的继承者,融合 Struts1, 使得它成为高度成熟的框架。POJO 与 OGNL 两大特性也使得它成为简单易用的框架,成为现在初学者的入手框架。其中 Struts 的配置文件 struts.xml 是领悟 Struts2 的核心。本文首先介绍 Struts2 的基本配置以免初学者感觉突兀,第二部分的路径部分为主要要讲解的内容 ( 本人实践多次的经验 )。
官网下载
所有我们所要学习的目标,我们都要找到其最原始的地方,通常都有其自己的官网。Struts2 官网地址:http://struts.apache.org/, 下载 zip 包到本地,解压后目录如下