HashMap得一点总结
HashMapp为什么在Hash的时候减1
在Java的Hashmap中有如下代码:
1 | final Node<K,V> getNode(int hash, Object key) { |
上面有一行是 first = tab[(n - 1) & hash]) != null
在Java的Hashmap中有如下代码:
1 | final Node<K,V> getNode(int hash, Object key) { |
上面有一行是 first = tab[(n - 1) & hash]) != null
这里面的部分概念参考了《Apress JavaI.O . NIO and NIO2》
NIO的一些操作基础就是Buffer
它的具体作用是帮助 DMA 快速的从硬盘上获取和写入数据
今天使用 Angular 的时候,看到书中封装了自己得一个 LoggerService ,然后自己也想尝试下,顺便也写下这个记录。
在 app 目录下建立一个 ts 文件,如下:
1 | export class LoggerService{ |
这个类就是封装了一层日志打印得函数,当然在这里也可以封装一些其他得函数。
在去年的时候短暂的接触了大概一个星期的 Angular 之后就再也没碰过了,今天突然想重新捡起 Angular 的相关知识,并且想将 Angular 结合 Bootstrap 一起使用。所以正好记录下一起结合使用的步骤。
初始化一个 Angular 的项目。初始化之后打开命令行,输入:
1 | npm install jquery --save-dev |
输入以上两条命令之后,在 package.json
中可以看到已经多出了 jquery 和 bootstrap 这两个库了。如下:
当初始化完成之后会在 node_modules 中出现 bootstrap 和 jquery 这两个文件夹。
在刚接触Java的时候经常听到的一句话便是在 Java 中,Exception 是可以捕获的,Error 是不可以捕获的。但是在随着学习的深入,会发现有些观点需要重新认识下了。
Throwable 这个类是自 JDK1.0 开始就存在于 Java 的语言之中。
首先引用一段 Oracle 官方文档上对 Throwable 的介绍Java8 Thrwoable的介绍:
The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause. For the purposes of compile-time checking of exceptions, Throwable and any subclass of Throwable that is not also a subclass of either RuntimeException or Error are regarded as checked exceptions.
Instances of two subclasses, Error and Exception, are conventionally used to indicate that exceptional situations have occurred. Typically, these instances are freshly created in the context of the exceptional situation so as to include relevant information (such as stack trace data).
太长,省略大部分了……
简单翻译下就是,Throwable 是 Error 和 Exception 的父类,并且只能是 Error 和 Exception 的实例才可以通过 throw 语句或者 Java虚拟机 抛出异常。Exception 或者 Error 是在出错的情况下新创建的,从而将出错的信息和数据包含进去。
另外在这个文档中还提到了一点就是当低层方法向高层方法抛出异常的时候,如果抛出的异常是受检查的异常,则
首先简单介绍下TreeSet和TreeMap的两种排序:
1 | private static void compareWithCpmparator(){ |
1 | a |
comparator
是空的,Debug一遍,发现这个方法其实调用的是NavigableMap
里面的comparator
1 | public Comparator<? super E> comparator() { |
1 | Comparator super K> comparator() |
comparator
。/**
在使用TreeSet的时候,插入的元素需要实现Comparable这个接口,而刚刚的元素是String,查看String的代码发现:
1 | public final class String implements java.io.Serializable, Comparable<String>, CharSequence { |
确实实现了,再测试一个没有实现的元素:
Zuul是SpringCloud生态体系中的网关一环,首先简单配置如下:
开启注册中心并且配置yml文件,如下:
1 | spring: |
开启用户的微服务:
1 | spring: |
编写一个测试的Controller:
在Java里面线程的中断是一个协作式的,也就是说线程会在自己合适的时候自己中断自己,一般来讲线程如果需要中断的话有如下两种方法:
interrupted()
或者isInterrupted()
方法,但是需要注意的是interrupted
会清除这个线程的状态当一个线程调用另一个线程的interrupt
的时候,另一个线程并不会马上结束,而是会设置一个中断的状态,如果一个线程处于阻塞的状态,那么此时该线程会马上抛出一个InterruptException,由上层的代码进行处理。
若线程没有处于阻塞的话,此时线程还是会执行的。但是线程需要自己在合适的地方通过上述的两个方法来判断自己是否应该中断。如果自己
在使用Nginx做一个反向代理的时候难免会碰到一些特殊的URL,例如获取图片的URL是http://dsda/XXX.jpg
,后来由于需要加一个时间戳来获取另外一张图片的话,此时的URL就为http://dsda/XXX.jpg?time=YYYY
。
当遇到这个情况的时候是有两种选择的,分别如下:
也就是在nginx中的server
里面再加入一个匹配 ,但是这样加入的话若以后不再更改还好,一旦需求再次变更,就会导致配置许多的location。所以这种做法的话如果只是一些固定的URL还是可行的,但是若匹配一些动态的URL则不推荐。
官网的说明如下:
1 | server { |
今天在使用nginx的时候访问首页总是提示403forbidden,经过各种查询之后,总结为如下几种原因:
755
或者777
如果出现首页的访问资源不是指定的目录的话,可以在/etc/nginx/nginx.conf
中添加一条语句root XXX
,XXX代表的是资源目录。
其他的暂时没发现什么问题