现在位置: 首页 > 算法 > 文章
2020年02月25日 算法 ⁄ 共 967字 评论关闭
  归并排序   归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。   基本思想   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。   合...
阅读全文
2020年02月25日 算法 ⁄ 共 2211字 评论关闭
  类锁和对象锁,synchronized修饰static方法与非static方法的区别   当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例),作用范围是整个静态方法,作用的对象是这个类的所有对象。   当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象),作用范围是整个方法,作用对象是调用该方法的对象。   结论: 类锁和对象锁,一个是类的Class对象的锁,一个...
阅读全文
2020年02月25日 算法 ⁄ 共 3518字 评论关闭
  synchronized 加到 static 方法前面是给class 加锁,即类锁;而synchronized 加到非静态方法前面是给对象上锁。这两者的区别我用代码来演示下:   对象锁和类锁是不同的锁,所以多个线程同时执行这2个不同锁的方法时,是异步的。   在Task2 中定义三个方法 doLongTimeTaskA和doLongTimeTaskB是类锁,而doLongTimeTaskC是对象锁。   public class Task2 {   public synchronized static void doLongTimeTaskA() {  ...
阅读全文
2020年02月25日 算法 ⁄ 共 7865字 评论关闭
  通过分析Synchronized和Static Synchronized这两个用法的分析,我们可以理解java中锁的概念。一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。实例锁对应的就是synchronized关键字,而类锁(全局锁)对应的就是static synchronized(或者是锁在该类的class或者classloader对象上)。下面的文章做了很好的总结:   ...
阅读全文
2020年02月21日 算法 ⁄ 共 3749字 评论关闭
  为什么需要倒排索引   倒排索引,也是索引。   索引,初衷都是为了快速检索到你要的数据。   每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。   对 Mysql 来说,是 B+ 树,对 Elasticsearch/Lucene 来说,是倒排索引。   Elasticsearch 是建立在全文搜索引擎库 Lucene 基础上的搜索引擎,它隐藏了 ...
阅读全文
2020年02月20日 算法 ⁄ 共 1461字 评论关闭
  快速排序(英语:Quicksort),又称划分交换排序,简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 n 个项目要 O(n log n) 次比较。在最坏状况下则需要O(n2) 次比较,但这种状况并不常见。事实上,快速排序O(n log n) 通常明显比其他算法更快,因为它的内部循环可以在大部分的架构上很有效率地达成。   快速排序步骤为:   1.从数列中挑出一个元素,称为"基准"。   2.重新排序数列,所有比基准值小的...
阅读全文
2020年02月19日 算法 ⁄ 共 2266字 评论关闭
  在Java 的三大 IO 模型,都会说到其中的 Non-Blocking IO 就不得不提零拷贝技术,你知道零拷贝技术吗?   什么是零拷贝   想要弄清楚什么是零拷贝,首先得明确一个问题,这里的拷贝指的是什么?我们这里所描述的 拷贝 指的是在应用程序中将文件从 A 拷贝到 B,其中的 A 和 B 可以是电脑上的磁盘文件,也可以是网络中的文件。像这样的拷贝操作在操作系统中经历了复杂的操作,首先应用程序发起读取文件操作,读取到文件后又...
阅读全文
2020年02月18日 算法 ⁄ 共 4397字 评论关闭
  本文实例讲述了Fleaphp常见函数功能与用法。分享给大家供大家参考,具体如下。   Fleaphp常见函数功能与用法   1. FLEA_Db_TableDataGateway::update()用法:   例如:修改一条 uid=22 的记录, name字段改成"11", pass字段改成"22",就要这样写:   $data = array('uid'=>22,'name'=>11,'pass'=>22);   $table->update($data);   2. FLEA_Db_TableDataGateway::updateByConditions()用法:   例如:更新所有 l...
阅读全文
2020年02月18日 算法 ⁄ 共 2598字 评论关闭
  从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数。连接一起就可以了。   < ?php   /**   *十进制转二进制、八进制、十六进制 不足位数前面补零*   *   * @param array $datalist 传入数据array(100,123,130)   * @param int $bin 转换的进制可以是:2,8,16   * @return array 返回数据 array() 返回没有数据转换的格式   */   function decto_bin($datalist,$bin)   { ...
阅读全文
2020年02月18日 算法 ⁄ 共 4516字 评论关闭
  php是一门很强大的语言,可以通过PHP实现很多东西,当然也可以通过PHP来实现趣味算法,下面就一起来看看。   php经典趣味算法实例代码   1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。   func...
阅读全文