- 博客(30)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
转载 Java面试通关要点汇总集
文章目录1. 基础篇1.1. 基本功1.2. 集合1.3. 线程1.4. 锁机制2. 核心篇2.1. 数据存储2.2. 缓存使用2.3. 消息队列3. 框架篇3.1. Spring3.2. Netty4. 微服务篇4.1. 微服务4.2. 分布式4.3. 安全问题4.4. 性能优化5. 工程篇5.1. 需求分析5.2. 设计能力5.3. 设计模式5.4. 业务工程5.5. 软实力基础篇基本功面向对...
2018-03-12 22:48:36
413
原创 如何实现自定义hashcode和equals方法
当需要自己实现hashCode()和equals()方法时,可以借助Apache Commons包的工具类:EqualsBuilder和HashCodeBuilder
2018-03-07 21:00:50
361
转载 Java 中的中文编码问题(非常详细)
只要有跨应用数据交换的地方,都可能产生编码和解码。出现乱码问题唯一的原因都是在 char 到 byte 或 byte 到 char 转换中编码和解码的字符集不一致导致的。几个常用的类:String name = "I am 君山"; byte[] utf8 = name.getBytes("UTF-8");String n = new String(utf8, "UTF-8");Chars...
2018-03-07 20:55:23
40240
3
原创 Java中读取大文件的工具类
超大文件容易导致内存耗尽和重复读取,怎么办?1、传统的在内存中读取这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。2、文件流使用java.util.Scanner类扫描文件的内容,一行一行连续地读取。这种方案将会遍历文件中的所有行——允许对每一行进行处理,而不保持对它的引用。总之没有把它们存放在内存中。3、Apache C...
2018-03-07 20:51:17
1068
原创 Java中String#split的坑
String str = "a,b,c,,";String[] ary = str.split(",");// 预期是5,结果是 3System.out.println(ary.length);所以,对于String的split方法,必须做最后一个分割符后是否为空的校验。...
2018-03-07 20:45:15
325
原创 基于泛型的PECS原则
PECS(Producer Extends Consumer Super)原则: 第一、 频繁往外读取内容的,适合用<? extends T>。 第二、 经常往里插入的,适合用<? super T>。我们知道Java泛型可以有多种写法,主要是 extends 和 super 关键字。比如:HashMap<T extends String>;HashMap<...
2018-03-07 20:43:58
434
原创 Double转BigDecimal
不能直接new BigDecimal(1.1),这样可能会有精度丢失。应该:new BigDecimal().valueOf(1.1); // 使用valueOf或new BigDecimal("1.1"); // 使用字符
2018-03-07 20:42:12
7222
原创 Java基础常识(适用于面试)
八大数据类型的对应类里有常量表示类型的最大值最小值等取值范围局部变量不能被声明为 static 变量final 对象的引用不能改变,但是里面的值可以改变类中的 final 方法可以被子类继承,但是不能被子类修改final 类不能被继承如果一个类包含抽象方法,那么该类一定要声明为抽象类volatile:使两个不同的线程总是看到某个成员变量的同一个值接口可多重继承接口(extends)普通的类方法是可...
2018-03-07 20:40:48
283
原创 BO、PO、DAO、DTO、VO、POJO
BO:Business Object,业务对象。主要是承载业务数据的实体。处理业务逻辑的时候使用,数据结构也是针对业务逻辑建立的。PO:persistence Object,持久化对象。数据最终要存储,无论以何种形式存储,都必须要持久化。加入使用关系数据库存储,一个PO对应一条数据库的记录,或者是对象从数据库查询出来的结果集的一条记录。DAO:Data Access Object,数据访问对象。包...
2018-03-07 20:34:43
199
原创 怎么做对象的深拷贝?
深拷贝的实现方案:借助Apache Commons包,内部为反射的实现: org.apache.commons.beanutils.PropertyUtils.copyProperties(Object dest, Object orig) org.apache.commons.beanutils.BeanUtils.copyProperties(Object dest, Object orig)...
2018-03-07 20:33:26
502
原创 for(;;)和while(1)两种死循环的区别
在JUC的源码中,经常看到for(;;),为什么不使用while(true)呢?for(;;)死循环里的两个;;代表两个空语句,编译器一般会优化掉它们,直接进入循环体。 while(true)死循环里的true被看成表达式,每循环一次都要判断表达式是否真。 即,相对来说for式死循环更加高效一点。当然以上条件成立还要看编译器的优化,一些编译器优化的两者并无区别,但是,并非所有的编译器都做了这样的优...
2018-03-07 20:30:02
14106
2
原创 CountDownLatch的简单示例
CountDownLatch有3个主要方法:1. 构造方法:定义计数器数量2. countDown():计数器减一3. await():阻塞当前线程直到计数器为0时,唤醒所有线程模拟多并发场景:定义一个CountDownLatch,每启动一个线程后让线程wait。等所有线程启动完毕后,执行每个线程的countDown直到计数器为0,此时所有线程同时执行。public class LocalVari...
2018-03-07 20:27:22
329
原创 如何调试多线程
1. 去除主线程的干扰在断点处增加断点属性:(!(Thread.currentThread().getName().equals("main")))2. 挂起整个JVM
2018-03-07 20:23:21
2083
原创 Java注解
注解的作用就是给代码打标签,是代码的元数据,本身没什么作用,需要结合反射进行处理。Java内置的3个注解: @Override @Deprecated @SuppressWarnings还有4种元注解,专门提供注解的创建:@Target 表示该注解可以用于什么地方.可以用的参数包括(可以指定多个,用逗号分隔.调用方法为ElementType.xxx.如果省略这个选项,那么就是可以用于所有地方):C...
2018-03-07 20:21:01
165
原创 Java和CGLIB的动态代理
静态代理和动态代理的区别是: 代理类和委托类的关系是在运行时还是运行前确定.动态代理分两种:Java反射机制实现的动态代理import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyInvocationHandler implements InvocationHandle...
2018-03-07 20:15:44
118
原创 Java8的日期API——joda time
Java中,现有的与日期和时间相关的类存在诸多问题,其中有:Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。对于时间、...
2018-03-07 20:13:34
1903
原创 Java IO的类介绍
分字符流和字节流,下图中没有包含RandomAccessFile,该类自成一派,属于IO包,但直接继承自object类。BufferedReader包装InputStreamReader,提供行读取。PipedReader和PiperWriter是用于不同线程之间通信的(传输字符),这两个必须结合使用,使用connect方法连接。FilterReader是抽象类DataInputStream和Da...
2018-03-07 20:09:26
221
原创 ArrayList、Vector、HashMap、HashTable、HashSet的默认初始容量、加载因子、扩容增量
Java中集合容量是有初始值的,如果容量不够用就会进行扩容,并将容器原来的数据全部复制到新的内存上。设置合理的初始容量,可以提高效率。加载因子(factor):小于等于1,当元素个数超过(容量长度*加载因子)时,进行扩容。List 元素是有序的、可重复,ArrayList、Vector默认初始容量为10。Vector:线程安全,性能差,底层数据结构是数组加载因子为1:即当元素个数超过容量长度时,才...
2018-03-07 20:00:20
3516
原创 Object类的常见方法
hashCode:默认返回System.identityHashCode()方法的值,是对象的内存地址equals:默认比较两个对象的内存地址是否相等getClass:返回对象所指向的类wait:在synchronized同步块中使用,表示线程释放资源并进入等待notify / notifyAll:在synchronized同步块中使用,表示唤醒一个/所有等待线程toString:不解释final...
2018-03-07 19:43:27
146
转载 String的hashCode算法的解读
注:出处不明public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31...
2018-03-07 19:28:44
2070
原创 如何获得Object类native方法的原生hashcode
System.identityHashCode():用于根据对象在内存中的地址算出来的一个数值。Object类原生的native方法hashCode()与System.identityHashCode()得出的值是一样的。如果我们重写了某个类的hashCode()方法,想得到原生的hashCode就可以使用identityHashCode方法得到。...
2018-03-07 19:24:21
1173
原创 Java1.7增加switch对字符串的支持
Java1.7之前switch只能局限于int 、short 、byte 、char四类做判断条件。在JVM内部实际大部分字节码指令只有int类型的版本。在使用switch的时候,如果是非int型,会先转为int型,再进行条件判断。Java1.7的switch增加了对String的支持,可String并不能直接转为int型,这是怎么做到的?//源代码 public class TestSwitc...
2018-03-07 19:19:44
1892
原创 getResourceAsStream的简单用法
InputStream is = this.getClass().getResourceAsStream(fileName); //包路径下获取资源InputStream is = this.getClass().getResourceAsStream("/" + fileName); // classpath下获取资源,包路径的根目录就是classpath路径InputStream is = ...
2018-03-07 19:05:56
782
原创 Java反射的API小结
类对象的获取:1. 直接使用Person.class2. obj.getClass()3. Class.forName("xxx");获取方法:getMethods获取所有包含父类的public方法getMethod获取指定包含父类的public方法getDeclaredMethods获取所有非父类方法getDeclaredMethod获取指定非父类方法获取构造方法:getConstructors...
2018-03-07 19:04:48
150
原创 Java动态代理的简单示例
1. 需要一个接口,用于定义被代理的行为。不使用接口不行。2. InvocationHandler接口的invoke方法有3个参数,分别是被代理对象、被执行的接口方法、方法参数3. Proxy.newInstance的参数分别是被代理对象的类加载器、接口、InvocationHandler实例public class MyInvocationHandler implements Invocatio...
2018-03-07 19:03:09
131
原创 AQS的原理浅析
AQS即AbstractQueuedSynchronizer,是实现ReentrantLock、Semaphore、CountDownLutch等同步工具的关键。AQS本身是一个队列,每个队列元素为一个Node节点,每个Node都有特定的mode状态,如Node.CONDITION、Node.SIGNAL、Node.EXCLUSIVE、Node.SHARED等等。AQS内部有一个int型的stat...
2018-03-07 13:23:57
297
1
原创 Java多线程小结
死锁:企图抢夺对方所持有的锁,谁都不先让,陷入死结。(保证统一的加锁解锁顺序可以避免)饥饿:由于优先级低等原因,一直抢不到锁而导致无法运行。活锁:譬如2个线程都发现对方有自己需要的锁,就主动释放锁给对方。结果双方都在谦让,以至于都在做让锁的无用功。线程的stop、suspend、resume等方法已废弃。线程的中断方法:1. interrupt():设置线程中断标志位,会对sleep和wait产生...
2018-02-16 21:11:24
185
转载 HP大中华区总裁孙振耀退休感言
人总是会遇到挫折的,人总是会有低潮的,人总是会有不被人理解的时候的,人总是有要低声下气的时候,这些时候恰恰是人生最关键的时候,因为大家都会碰到挫折,而大多数人过不了这个门槛,你能过,你就成功了。我总结人生有三个阶段,一个阶段是为现实找一份工作,一个阶段是为现实,但可以选择一份自己愿意投入的工作,一个阶段是为理想去做一些事情。
2017-03-02 20:41:21
264
如何让EXT的日期控件一直显示?不隐藏
2009-09-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人