随笔分类 -  Java

我喜欢Java
什么时候适合NoSQL
摘要:突然感悟了什么时候需要NoSQL。 当BaseModel不确定模式的时候。 例如,一个管理mysql集群的webapp,很容易想到的model有cluster对象,一个cluster对象有1到多个mysqlapp对象。mysqlapp的字段可能有id, clusterid, hostip, mysq 阅读全文
posted @ 2019-12-06 13:10 还好可以改名字 阅读(211) 评论(0) 推荐(0)
spring security源码debug [0]
摘要:spring security的典型用法 配置 下面是spring security.xml的配置 在web.xml中添加spring的DelegatingFilterProxy 其中contextAttribute配置的spring的webapplicationcontext的key name,注 阅读全文
posted @ 2019-12-06 09:28 还好可以改名字 阅读(434) 评论(0) 推荐(1)
MongoDB 的objectid和UUID
摘要:objectid是12字节组成,四个成分timestamp+machash+pid+inc 默认mongodb collection内的_id是唯一的。客户插入文档时依赖driver自动生成的_id能否保证唯一呢? 自动objectid的唯一性 自动生成并不是mongo daemon生成的,而是dr 阅读全文
posted @ 2019-05-29 09:20 还好可以改名字 阅读(4042) 评论(0) 推荐(0)
Builder模式
摘要:将构造和表示分离,目标对象是抽象出来的比较简单便于理解的类,而从现有条件构造出对象的过程很复杂。这个描述还没有到点上。来一个比较使用的场景。 一个场景 例如需要构造一个Person类,有name,id,age,sex,height,weight,hobby。 其中name和id是必须的,其他是可选的 阅读全文
posted @ 2019-05-18 11:19 还好可以改名字 阅读(142) 评论(0) 推荐(0)
ThreadLocal为什么不使用Thread-value实现
摘要:实现 各个Thread对象保存一个 ,保存的是本Thread涉及的所有的ThreadLocal变量的本线程版本数据。 一个app中可能多出用到不同的ThreadLocal,tl1被t1 t3使用,tl2被t1,t2,t4使用,所以t1的Map中保存了两个entry。 为什么不是的Map的实现 假如一 阅读全文
posted @ 2019-03-11 12:43 还好可以改名字 阅读(834) 评论(0) 推荐(0)
Maestro OAuth实现分析
摘要:虽然OAuth的基本有理早就知道。但是具体实现的一些方案细节是什么并没有研究过,现在就跟踪一下Maestro的实现。Maestro授权的restapi是/authorize,参数response_type: code--指定返回类型,code表示,返回的一串code代表当前请求者认证后的身份user 阅读全文
posted @ 2019-02-15 13:56 还好可以改名字 阅读(177) 评论(0) 推荐(0)
JVM类加载的符号解析
摘要:典型的一个类中,主要是static字段,类字段,static方法,类方法这四种存在。 至于static字段和类字段的初始化赋值语句,看似有点特别,其实在编译后归入 方法。 对于一个方法,形式参数实际上在调用方法之前会被压栈,进入操作数栈,这是栈帧的一部分。 方法的局部变量,如果是对象,对象本身的数据 阅读全文
posted @ 2018-10-11 09:29 还好可以改名字 阅读(825) 评论(0) 推荐(0)
JMM和volatile,final,锁的内存语义
摘要:volatile内存语义 + 结果可见性。对于volatile的读写都是看成直接对mem的读写,而不是对本地cache的读写。 volatile语义的实现。 + 禁止编译器的相关重排序 + 禁止CPU指令重排序 这两步需同时保证,否则无法保证volatile语义。对于编译器所禁止的指令重排序: + 阅读全文
posted @ 2018-05-15 10:34 还好可以改名字 阅读(690) 评论(0) 推荐(0)
Java泛型边界问题,super和extends关键字
摘要:背景 为什么JDK5要引入泛型,泛型保证参数类型一致性。什么叫类型一致? 假设有继承关系,A list; list.add(new C()); list.add(new D()); list.add(new B());//compile ERROR 并没有破坏list的类型一致性,因为list被声明 阅读全文
posted @ 2018-05-04 09:46 还好可以改名字 阅读(4221) 评论(0) 推荐(0)
Java synchronized锁的底层实现概述
摘要:偏向锁 JVM默认开启偏向锁。在对象头中锁标志前一位用来标记偏向锁是否可用。 锁标记01表示偏向锁。 偏向锁释放 获得偏向锁的线程,在对象头中写有线程id,不会主动释放锁: 没有其他线程竞争,对象头中始终是获得锁的tid。 线程tid2竞争,此时objhead中仍存着tid1。JVM首先安全暂停ti 阅读全文
posted @ 2018-05-02 21:24 还好可以改名字 阅读(1641) 评论(0) 推荐(0)