箭头函数:
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
//这种方法是线程不安全的,如果并发则会创建多个对象 class SinglePattern{ private static SinglePattern instance ; //1.构造方法私有化 private SinglePattern() { } //2.提供一个全局访问点 public static SinglePattern getInstance() { if(instance == null) { instance = new SinglePattern(); } return instance; } }
多线程有一个锁机制。使用synchronized修饰。我们可以锁住获取对象的方法。代码如下:
/** * 加锁后的,单例模式类 * @author wanghao * */ class SinglePattern{ private static SinglePattern instance ; //1.构造方法私有化 private SinglePattern() { } //2.提供一个全局访问点 加锁后 public static synchronized SinglePattern getInstance() { if(instance == null) { instance = new SinglePattern(); } return instance; } }
众所周知线程安全就等于效率会相对低点。所有经过改造优化,出现另一种双重判断方式。代码如下:
/** * 加锁后的,单例模式类 +优化后 * @author wanghao * */ class SinglePattern{ private static SinglePattern instance ; //1.构造方法私有化 private SinglePattern() { } //2.提供一个全局访问点 加锁后 public static SinglePattern getInstance() { if(instance == null) { synchronized(SinglePattern.class) { if(instance == null) { instance = new SinglePattern(); } } } return instance; } }
单例模式重点就一个对象,这样理论上会是创建次数少获取的次数多。所以,我们只需加锁创建对象的方式,而判断是否为null,可以不加锁。可以提高效率。
如果按前面一种方式,如果高并发10个线程同时访问,则需要耗费10*(等待时间+判断时间),
而如果用第二张方式,如果通用10个线程访问,则只需10*(判断时间),如果没有对象则再加上一次判断时间和创建对象的时间。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。一般来说,数据库只需满足第三范式(3NF)就行了。
crontab命令的使用:
实现效果:
133*****333
转载自阮一峰的博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
Flex 是 Flexible Box 的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。
该类的作用就是帮助其他的类“生产”对象,也就是说,只要传递给这个“工厂”一个类名,就可以得到一个相应的对象。
单例模式是一种常见的设计模式
在实际的运用中,存在一些类,只需要实例化一个对象,就可以完成其所有的功能操作,最典型的就是数据库操作。
所以,如果我们能够通过某些技巧,使得一个类只能开辟一个对象空间的话,就可以节省相应的对象资源,这种模式就叫作单例模式。
二分法查找的思路如下:
1、首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
2、如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。
3、如果某一步数组为空,则表示找不到目标元素。
原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
1、从数列中挑出一个元素,称该元素为“基准”。
2、扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。
3、通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。