![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
坑铿吭
这个作者很懒,什么都没留下…
展开
-
几种常见排序算法java实现
选择排序、插入排序、希尔排序class Sort{ //选择排序 public static void Selection_sort(Comparable[] a){ int N = a.length; for(int i = 0; i < N; i++){ int min = i; for(in...转载 2018-06-06 20:25:03 · 145 阅读 · 0 评论 -
谨慎设计方法的原型
为了使自己写的API发布出去后,别人能够容易使用,应该参考以下这些原则:1.谨慎选择方法的名字:选择一个与功能相符合,并且相似的名字。比如在java中,对于移除,通常命名为remove,比较少用delete2.不要过于追求提供便利的方法:不要定义太多冗余的方法3.避免太长的参数列表:参数列表数,通常最大值被定为3个,如果超过3个,很容易出错。并且,避免定义太多类型相同的参数4.对于...转载 2018-06-16 08:56:06 · 227 阅读 · 0 评论 -
接口优于抽象类
使用抽象类来定义允许多个实现的类型,比使用接口有一个明显的优势:抽象类的演化比接口的演化要容易得多。如果在后续的发行版本中,希望在抽象类中增加一个新的方法,那么,总是可以增加一个具体的方法,它包含了一个合理的默认实现,然后,抽象类的所有已有的实现都自动提供了这个新的方法。但是对于接口,这是行不通的。 要想在一个公有的接口中增加一个方法,而不打破现有的、已经在使用这个...转载 2018-06-09 08:36:10 · 286 阅读 · 0 评论 -
Volatile
volatile在多线程中有以下特性:可见性:对一个volatile变量的读,总能看见(任意线程)对这个volatle共享变量的最新更新值原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性 对于可见性,不仅对volatile修饰的那一个变量可见,对使用volatile变量的线程里的其他普通变量也可见,所以volatile实现了两个线程...转载 2018-06-17 11:29:23 · 114 阅读 · 0 评论 -
接口只是被用于定义类型
当一个类实现了一个接口的时候,这个接口被用做一个类型,通过此类型可以引用这个类的实例。因此,一个类实现了一个接口,就表明客户可以对这个类的实例实施某些动作。为了任何其他目地而定义接口是不合适的。 有一种接口被称为常量接口,如下:public interface PhysicalConstants{ static final double AVOGADROS_...转载 2018-06-10 10:12:22 · 234 阅读 · 0 评论 -
java中的final对重排序的限制与逸出
在java中,为了保证final域的正确使用,对重排序进行了一些限制1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序2.初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序 有了这个限制,如下A,B线程分别调用writer和reader方法时,可以保证final变量被初始化了 publ...转载 2018-06-17 15:52:34 · 1960 阅读 · 0 评论 -
java中的Threadlocal对象
对于java多线程中的共享对象Threadlocal对象,在不同线程取到的值不同,查看源码实现,其实每个value值并不保存Threadlocal对象中,而是保存在每个线程中的定义的Map型变量Threadlocals中,键值是这个共享变量Threadlocal对象,每个线程有相同的Threadlocal对象作为的键,但value是不一样的。 ...转载 2018-06-17 16:07:48 · 226 阅读 · 0 评论 -
谨慎地使用重载
重载class CollectionClassifier{ public static String Classify(Set s){ return "set"; } public static String Classify(List l){ return "list"; } public static Strin...转载 2018-06-18 09:22:52 · 158 阅读 · 0 评论 -
返回零长度的数组而不是null
一个从一个取数组值的方法,当数组为空时,返回一个零长度数组而不是null.转载 2018-06-18 09:38:17 · 147 阅读 · 0 评论 -
java双重检查锁定
在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化 。这称为延迟初始化或懒加载 看一个不安全的延迟初始化:class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { ...转载 2018-06-18 10:21:16 · 297 阅读 · 0 评论 -
优先考虑静态成员类
嵌套类是定义在另一个类的内部的类。嵌套类分为:静态成员类、静态成员类、匿名类、局部类 静态成员类:它不依赖于外部成员类的实例,可以单独的创建。它只能访问外部类的静态成员变量和方法,包括private 非静态成员类:它能访问外部类的所有域和方法,所以它不能没有在实例化一个外部类的情况下创建。当非静态类的实例被创建的时候,它和外部类之间的关联关系也随之被建立了起来。每个实例都会包含一个...转载 2018-06-11 09:09:26 · 140 阅读 · 0 评论 -
二叉查找树(BST)
class BST<Key extends Comparable<Key>, Value>{ private Node root; private class Node{ private Key key; private Value val; private Node left, right; ...转载 2018-06-08 17:21:53 · 140 阅读 · 0 评论 -
需要时使用保护性拷贝
假设类的客户会尽一切手段来破坏这个类的约束条件,在这样的前提下,必须保护性的设计程序 在大多数情况下,都不希望类中的域通过另一个类的方法直接被修改,通常将非可变的参数修饰为private,但有时候会不小心提供这种修改的“机会”class Period{ private final Date start; private final Date end; ...转载 2018-06-15 09:09:00 · 175 阅读 · 0 评论 -
检查参数的有效性
绝大多数方法和构造函数都会对于传递给它们的参数值有某些限制,比如,索引值不能为非负数,对象引用不能为null。对于编写这些函数,应该考虑对于它的参数有哪些限制,应该把它们写在文档中,并且在这个方法体的起始处,通过显示的检查来实施限制。 有效性检查所需要的适量工作从第一次合法性检查失败中就可以连本带利得到补偿。因为如何为做检查,后面一旦出错,排查错误的花费要大的多...转载 2018-06-14 08:10:32 · 677 阅读 · 0 评论 -
将局部变量的作用域最小化
使一个局部变量的作用域最小化,最有力的技术是在第一次使用它的地方声明。避免在使用前很早就声明一个局部变量,这样扩大范围,造成误用。 几乎每一个局部变量在声明的时候都应该包含一个初始化表达式。但有时这对try-catch不容易做到,如果try里面才要使用这个变量,而try-catch后,还要继续使用这个变量,那么只能讲这个变量声明在try-catch之前,并且没有合适的初始化。...转载 2018-06-22 08:18:39 · 151 阅读 · 0 评论 -
了解和使用库
在java中,通过使用标准库,可以充分利用这些编写标准库的专家的知识,以及在你之前其他人的使用经验。可以使用将精力放在业务上,而不是底层实现上。 有一些常见的标准库你需要了解:java.lang.util,java.io,Collections,Doug lea 的util.concurrent 。。。 总之,不要重复造轮子,这并不能体现你的能力。如果你要做的事情看起来...转载 2018-06-23 07:37:50 · 188 阅读 · 0 评论 -
如果要求精确的答案,请避免使用float和double
对于要求精确答案的计算任务,不要使用float和double。这时应该选择BigDecimal。转载 2018-06-24 08:17:40 · 263 阅读 · 0 评论 -
如果其他类型更合适,则尽量避免使用字符串
字符串不适合代替其他的类型。当从文件读取数据时,通常都是字符串形式,这是应该把字符串中数字用合适的类型表示 字符串不适合代替枚举类型。 字符串不适合代替聚集类型。String compoundKey = className + “#”+i.next() 这样用#来分隔,不如用一个类来替代。...转载 2018-06-24 08:18:16 · 211 阅读 · 0 评论 -
33.了解字符串连接的性能
不要这样连接字符串,字符串是不可变的,每次连接都会创建新的字符串 String s = ""; for(int i = 0; i < 10000; i++){ s += "String"; } 应该利用StringBuilder StringBuilder builder = new...转载 2018-06-24 08:18:33 · 120 阅读 · 0 评论 -
通过接口引用对象
通过接口去引用对象,方便以后相似类的修改 List sub = new Vector();如果原先实现中,并不依赖于Vector的线程安全和一些List中没有的新实现的方法,那么很容易用ArrayList替换 List sub = new ArrayList(); 所以,在通常使用接口去引用对象,这在一定程度上是程序更加灵活。如果没有合适的接口,那么,用类而不是接口来引用...转载 2018-06-24 08:19:02 · 542 阅读 · 0 评论 -
复合优先于继承
继承是实现代码重用的有力手段,但不适当地使用继承会导致脆弱的软件。如果在同一个包下继承比较安全,因为同一个包下,程序员都能看到子类与父类,但当跨包后,如果没有详细的说明文档,可能非常危险。 继承打破了封装性,一个子类依赖于其超类中特定功能的实现细节。如果超类发生变化,那么子类也需要进行相应的变化。如果在修改超类代码后,未告知子类,子类原来运行正常的代码,现在则可能变得不正常。...转载 2018-06-07 18:39:20 · 161 阅读 · 0 评论 -
要么专门为继承而设计,并给出文档说明,要么禁止继承
对于继承与父类的子类,父类的改动,可能会影响子类的,所以如果要编写可被继承的父类,父类的文档必须精确的描述改写每一个方法带来的影响。该文档中所说明的自用模式,以及对于其受保护方法和域所隐含的细节,已经做出了永久的承诺。子类在实现时,不管调用父类的方法,还是覆盖父类中的方法,都应该要注意父类实现的细节,而不仅仅是当做普通的API来调用。 为了允许继承,一个类还必须...转载 2018-06-08 08:55:11 · 135 阅读 · 0 评论 -
java序列化注意
java序列化能够保证对象状态的持久保存,但一些复杂情况还是比较难处理:1.当父类继承了Serializable接口是,所有子类都可以被序列化2.子类实现了Serializable接口,父类没有,父类中的属性不能序列化(不报错,数据会丢失),但是在子类中属性仍能正确序列化3.如果序列化的属性是对象,则这个对象必须实现Serializable接口,否则会报错4.在反序列化时,如果对象的属性有修改或...转载 2018-06-08 09:09:17 · 800 阅读 · 0 评论 -
java多线程join方法
// 加锁当前线程对象public final synchronized void join() throws InterruptedException {// 条件不满足,继续等待while (isAlive()) {wait(0);} // 条件符合,方法返回} 当前线程调用join方法,会等待join方法完成才继续下面的程序。原理就是得到了锁,然后调用wait方法,等待唤醒 ...转载 2018-06-30 09:54:55 · 156 阅读 · 0 评论 -
谨慎地使用本地方法
Java Native Interface(JNI)允许java应用去调用本地方法,这些本地方法是非java语言所写(如C/C++)。 使用本地方法主要有3个用途: 1. 提供了“访问与平台相关的设施”的能力,比如访问注册表和文件锁。在并发包concurrent中涉及到锁的很多操作都使用了native方法 2.提供给了访问老式代码库的能力 3.在关键...转载 2018-06-29 09:21:53 · 195 阅读 · 0 评论 -
java中Thread的sleep() 与yield()区别,yield()与join()区别
sleep() 与yield()1.sleep()方法给其他线程运行机会的时候,不考虑线程的优先级,因此当高优先级线程sleep()后,低优先级任务有机会运行;但是yield()只会给同优先级或更高优先级线程运行的机会,甚至可能是自己继续运行2.线程调用sleep()后,转入阻塞状态,而调用yield()后转入了就绪状态。3.sleep方法声明抛出InterruptedExceptio...转载 2018-08-03 10:02:17 · 253 阅读 · 0 评论 -
Atomic
https://blog.csdn.net/zhangerqing/article/details/43057799原创 2019-08-13 06:56:39 · 103 阅读 · 0 评论 -
RPC与消息中间件介绍 转
https://blog.csdn.net/justloveyou_/article/details/79441306https://juejin.im/post/5b2cb6fdf265da599e6c459e转载 2018-10-23 11:12:22 · 658 阅读 · 0 评论 -
破解Idea
https://www.cnblogs.com/jpfss/p/8872358.html转载 2018-11-04 08:48:31 · 142 阅读 · 0 评论 -
hashmap为什么线程不安全,出现死循环
http://www.importnew.com/22011.htmlhttps://www.cnblogs.com/qiumingcheng/p/5259892.html转载 2018-11-18 09:07:49 · 308 阅读 · 0 评论 -
git
1.创建git initgit remote add origin ssh://git@git.sankuai.com/~yangsihao/test.gitgit config --global user.name "杨思豪"git config --global user.email "yangsihao@meituan.com"2.版本回退git reset --har...原创 2019-08-12 17:15:54 · 116 阅读 · 0 评论 -
zk应用
1.锁前提:zk中有有序节点,临时节点在用户断开连接后,会自动失效,并且客户端可以watch机制,对一个节点目录进行操作的监视,一旦改目录有变化会通知客户端, 排他锁:只有一个客户端能够获得锁 获取锁:客户端通过create()在/exclusive/下创建lock临时节点/exclusive/lock节点,对于同一个节点,zk保证只有一个用户会创建成功,即得到了锁。其他未得到锁的客...原创 2019-08-12 18:46:06 · 144 阅读 · 0 评论 -
泛型的擦除
先看两个例子来理解泛型的擦除是什么public class Main{ public static void main(String[] args) { Class c1 = new ArrayList<String>().getClass(); Class c2 = new ArrayList<Integer>().getC...原创 2019-08-13 06:56:16 · 135 阅读 · 0 评论 -
单元测试
1.单元测试(Unit Test)单元测试(Unit Test)是一种对隔离的小型代码单元进行测试的测试实践。单元:在Java中,一般情况下,单元就是方法。特殊地,根据业务情况,可以把一个类或者一个应用看做单元。小型:小型代码块的用意更加明确,测试编写更加容易,易覆盖全;小型代码块所提供的反馈环路较短,测试速度更快。隔离:对于单元中的外部依赖(如网络、文件等),应该用模拟来完成依赖...原创 2019-08-13 06:59:52 · 192 阅读 · 0 评论 -
Java线程池中的核心线程是如何被重复利用的
https://blog.csdn.net/MingHuang2017/article/details/79571529转载 2019-09-03 16:43:12 · 330 阅读 · 0 评论 -
java后台接口SSM框架解决跨域问题
https://blog.csdn.net/qq_17759721/article/details/80668293转载 2018-10-08 20:40:04 · 1724 阅读 · 0 评论 -
mybatis 传递参数的三种方式
https://blog.csdn.net/auly2017/article/details/73205831转载 2018-10-12 14:59:51 · 167 阅读 · 0 评论 -
JDK、JRE、JVM三者的区别
https://blog.csdn.net/github_30605157/article/details/61633508https://www.cnblogs.com/yangming1996/p/8508187.html转载 2018-08-27 08:52:16 · 110 阅读 · 0 评论 -
java中 new和Clone的区别
https://blog.csdn.net/iblade/article/details/80749148转载 2018-08-27 19:12:42 · 603 阅读 · 0 评论 -
三层架构:即表现层、业务层、持久层
https://www.cnblogs.com/jichuang/p/6663940.htmlhttps://zhidao.baidu.com/question/367505343324514164.html转载 2018-08-21 11:02:28 · 1090 阅读 · 0 评论