随笔分类 -  【Java 基础复习】

摘要:接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。 接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。 一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 阅读全文
posted @ 2021-04-28 23:35 西北野狼 编辑
摘要:什么是内存泄漏: 对象没有被应用程序使用,但是没有移除掉,还在被引用。 判断一个内存空间是否符合垃圾收集的标准有两个:一个是给对象赋予了空值null,以下再没有调用过另一个是给对象赋予了新值,这样重新分配了内存空间。 Java内存泄漏引起的原因 无用对象持续占有内存或者得不到及时释放,从而造成内存浪 阅读全文
posted @ 2021-04-28 17:22 西北野狼 编辑
摘要:MessageDigest MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。 MessageDigest 对象开始被初始化。该对象通过使用 " " ) 方法处理数据。任何时候都可以 阅读全文
posted @ 2019-01-20 23:21 西北野狼 编辑
摘要:编写高质量代码:改善Java程序的151个建议 [117~128] Thread 不推荐覆写start方法 先看下Thread源码: 启动线程前stop方法是不可靠的 看下线程stop源码: start源码: 注意看start0方法和stop0方法的顺序,start0方法在前,也就说既是stopBe 阅读全文
posted @ 2018-08-14 16:42 西北野狼 编辑
摘要:编写高质量代码:改善Java程序的151个建议 [106~117] 动态代理可以使代理模式更加灵活 动态代理使用场景: 不用显式创建代理类即实现代理的功能,例如可以在被代理的角色执行前进行权限判断,或者执行后进行数据校验。 使用反射增加装饰模式的普适性 反射让模板方法模式更强大 提倡异常封装 具体调 阅读全文
posted @ 2018-08-13 17:31 西北野狼 编辑
摘要:建议的采用顺序是List中泛型顺序依次为T、?、Object (1)、List是确定的某一个类型 List表示的是List集合中的元素都为T类型,具体类型在运行期决定;List<?>表示的是任意类型,与List类似,而List则表示List集合中的所有元素为Object类型,因为Object是所有类 阅读全文
posted @ 2018-08-13 11:02 西北野狼 编辑
摘要:编写高质量代码:改善Java程序的151个建议 [78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版本,HashTable是HashMap的多线程版本。 非稳定排序推荐使用List 对于变动的集合排序 1 阅读全文
posted @ 2018-08-10 17:26 西北野狼 编辑
摘要:编写高质量代码:改善Java程序的151个建议 [65~78] 原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱。 输出的结果是: 元素类型是:class [I 前后是否相等:true 如果要转换,建议转换为对应的包装类,再使用 List list= Arrays.asList(d 阅读全文
posted @ 2018-08-09 17:41 西北野狼 编辑
摘要:编写高质量代码:改善Java程序的151个建议 [52~64] 推荐使用String直接量赋值 Java为了避免在一个系统中大量产生String对象(为什么会大量产生,因为String字符串是程序中最经常使用的类型),于是就设计了一个字符串池(也叫作字符串常量池,String pool或String 阅读全文
posted @ 2018-08-07 09:07 西北野狼 编辑
摘要:编写高质量代码:改善Java程序的151个建议 [36~51] 工具类不可实例化 工具类的方法和属性都是静态的,不需要生成实例即可访 问,而且JDK也做了很好的处理,由于不希望被初始化,于是就设置了构造函数private的访问权限,表示出了类本身之外,谁都不能产生一个实例: 避免对象的浅拷贝 sup 阅读全文
posted @ 2018-08-06 14:29 西北野狼 编辑
摘要:提防包装类型的null值 包装对象和拆箱对象可以自由转换,这不假,但是要剔除null值,null值并不能转换为基本类型。对于此问题,我们谨记一点:包装类型参与运算时,要做null值校验。 谨慎包装类型的大小比较 java public class Client { public static voi 阅读全文
posted @ 2018-07-24 08:56 西北野狼 编辑
摘要:警惕自增的陷阱 不要只替换一个类 对于final修饰的基本类型和String类型,编译器会认为它是稳定态的(Immutable Status)所以在编译时就直接把值编译到字节码中了,避免了在运行期引用(Run time Reference),以提高代码的执行效率。对于我们的例子来说,Client类在 阅读全文
posted @ 2018-07-23 15:33 西北野狼 编辑
摘要:206 断点下载时用到,客户端请求了一部分内容,服务器成功把这部分内容返回给它,这时候就是用这个状态。 301 永久跳转,原地址不存在了,url被指向到另一个地址。这个主要是搜索引擎相关,影响爬虫的检索行为。 302 临时跳转,服务器会返回一个新的url给客户端,客户端可以继续访问这个url来获取内 阅读全文
posted @ 2018-07-01 23:52 西北野狼 编辑
摘要:乐观锁和悲观锁 Synchronized属于 悲观锁 ,悲观地认为程序中的并发情况严重,所以严防死守。CAS属于 乐观锁 ,乐观地认为程序中的并发情况不那么严重,所以让线程不断去尝试更新。 性能对比: Synchronized关键字会让没有得到锁资源的线程进入blocked状态,而后在争夺到锁资源后 阅读全文
posted @ 2018-07-01 00:44 西北野狼 编辑
摘要:深入学习semaphore 控制同时访问资源线程数 访问特定资源前,先使用acquire(1)获得许可,如果许可数量为0,该线程则一直阻塞,直到有可用许可。 访问资源后,使用release()释放许可。 demo: 非公平策略 acquire实现,核心代码如下: java final int non 阅读全文
posted @ 2018-05-24 10:10 西北野狼 编辑
摘要:ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法,只是入参不同,这里看的是入参为Object的remove方法)是怎么实现的: 执行System.arraycopy方法,导致删除元素时涉及到数组元素的移动。 删除方法1: modCount+1,涉及到ite 阅读全文
posted @ 2018-05-09 08:50 西北野狼 编辑
摘要:Hashmap在并发环境下,可能出现的问题: 1、多线程put时可能会导致get无限循环,具体表现为CPU使用率100%; 原因:在向HashMap put元素时,会检查HashMap的容量是否足够,如果不足,则会新建一个比原来容量大两倍的Hash表,然后把数组从老的Hash表中迁移到新的Hash表 阅读全文
posted @ 2018-05-08 14:57 西北野狼 编辑
摘要:正确截取List指定位置的内容 阅读全文
posted @ 2018-04-24 09:22 西北野狼 编辑
摘要:接口是常量值和方法定义的集合。接口是一种特殊的抽象类。 Java类是单继承的。classB Extends classA java接口可以多继承。Interface3 Extends Interface0, Interface1, interface…… 不允许类多重继承的主要原因是,如果A同时继承 阅读全文
posted @ 2017-06-29 22:19 西北野狼 编辑
摘要:下面是重写ArrayList,并保证ChooseCars里面alpha字段不重复的例子public class DistinctList extends ArrayList{ private static Map distinct_map = new HashMap(); pr... 阅读全文
posted @ 2015-10-21 08:59 西北野狼 编辑