摘要:
1.运行时异常与有效性检查相关以前一直认为运行时异常是可以捕获并恢复的。比如IllegalArgumentException,比如客户端代码在捕获之后,可以重新传一个符合约束的参数去调用API(这样的客户端代码是不很傻)。如果这样理解,很容易把受检异常与运行时异常混淆。因为受检异常的一个显著的特点就是用户可以捕获并”恢复“。 运行时异常出现的场景:前提违例,也就是client代码没有按照API的约束去调用。约束类似于人们做生意的合同。约定输入什么,返回什么。 “约束”经常出现在构造方法或者readObject(另类的构造方法)中。最常见的参数的有效性检查也是约束的一种情况。2.受检异常可”恢复 阅读全文
摘要:
线程安全场景备忘:1.加载引起的线程问题延迟加载-》使用延迟加载的单例(有的单例的实现并不需要延迟加载)-》避免线程多次实例化域,只实例化一次2. 非延迟加载的静态域的线程安全问题:多线程修改域的属性值。注意,这个示例不存在场景1的问题。因为域是静态域且非延迟加载,并且该域私有,这样该域只会实例化一... 阅读全文
摘要:
一。非静态域的延迟加载使用DCL实现的问题:编译器会无序写入1.什么是无序写入:按常规先初始化,后指向。真实的情况是写指向,后初始化。当执行instance =new Singleton(); 相当于执行了下列伪代码: mem = allocate(); //Allocate memory for Singleton object.instance = mem; //Note that instance is now non-null, but //has not been initialized.ctorSingleton(instance); //Invoke constructor fo 阅读全文
摘要:
synchronized(class)很特别,它会让另一个线程在任何需要获取class做为monitor的地方等待.class与this做为不同的监视器可以同时使用,不存在一个线程获取了class,另一个线程就不能获取该class的一切实例.根据下面的代码自行修改,分别验证下面的几种情况:synchronized(class)synchronized(this)->线程各自获取monitor,不会有等待.synchronized(this)synchronized(this)->如果不同线程监视同一个实例对象,就会等待,如果不同的实例,不会等待.synchronized(class)synch 阅读全文
摘要:
同步最基本的目的是保证原子性。另一个容易忽略的目的是可见性,即一个线程修改的共享数据对另一个线程可见。因为一些基本类型的赋值操作本身是原子的。所以针对这些赋值操作在不使用synchronized的情况下,可以使用volatile来解决一个线程的修改对另一个线程的可见。 所以volatile是在能保证原子性的前提下,避免使用synchronized解决可见性的办法。private static volatile int nextSerialNumber = 0;public static int generateSerialNumber() { //由于nextSerialNumber++这样. 阅读全文
摘要:
ThreadLocal使用场景:避免引起线程安全问题,比如多个线程访问类的静态域.具体的一个示例,比如线程上下文仅需要唯一标志的变量,比如调用需要的token或者请求生成的唯一的key.原理:内部定义一个HaspMap<String,Object>当往里面放数据时,先获得当前线程的名字:String name =Thread.currentThread().getName();然后往Map中放数据,map.put(name,o);当key值不一样即线程的名字不一样的时候,取不出数据.但是如果有两个线程我们通过改名来实现2个线程同名,那么也是取不出数据的,因为java内部已经将每个线 阅读全文
摘要:
一。使用场景: 本地新建一个分支后,必须要做远程分支关联。如果没有关联,git会在下面的操作中提示你显示的添加关联。关联目的是如果在本地分支下操作: git pull, git push ,不需要指定在命令行指定远程的分支.I create a new branch in Git:git branch my_branchPush it:git push origin my_branchNow say someone made some changes on the server and I want to pull from origin/my_branch. I do:git pullBut 阅读全文
摘要:
延迟加载分为实例域与静态域二种实例的延迟加载。主要看创建实例的成本。一般需要测试之后才决定是否使用延迟加载。利:消耗资源的对象延迟加载。弊:访问的线程会由于延迟加载变慢同时多线程情况下,需要同步。实现方式:一。 synchronized同步方法。private FieldType field;synchronized FieldType getField() { if (field == null)field = computeFieldValue(); return field;}二。DC检查更优。 Double-check idiom for lazy initialization of 阅读全文
摘要:
正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。1.可在同一应用服务器内共享方法:设置cookie.setPath("/");本机tomcat/webapp下面有两个应用:cas和webapp_b,1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可以在webapp_b下面获取到cas 阅读全文
摘要:
OAuth2.0 错误码新浪微博OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2.0协议对本请求的请求头部、请求参数进行检验,若请求不合法或验证未通过,授权服务器会返回相应的错误信息,包含以下几个参数:error: 错误码error_code: 错误的内部编号error_description: 错误的描述信息error_url: 可读的网页URI,带有关于错误的信息,用于为终端用户提供与错误有关的额外信息。 错误信息的返回方式有两种:1. 当请求授权Endpoint:https://api.weibo.com/2/oauth2/authorize 时出现错误,返回 阅读全文