Java
eaphy
这个作者很懒,什么都没留下…
展开
-
Java 集合的总结
Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,其中Set、List是 Collection 接口的继承,它们都有各自的实现类。1.Set 的实现类主要有 HashSet和 TreeSetHashSet 使用哈希表实现的,无序不可重复,可以放入null,但只能放入一个nullTreeSet 使用二叉树实现的,有序的,不原创 2017-05-06 21:26:41 · 276 阅读 · 0 评论 -
java8 lambda 表达式的运用
函数式接口:如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口如果我们在某个接口上申明了FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口如果某个接口只有一个抽象方法,但我们并没有给该接口申明FunctionalInterface 注解,那么编译器依旧会将该接口看作是函数式接口如果一个接口中抽象方法是重写了object的公有方法,那么此方...原创 2018-11-24 22:23:19 · 140 阅读 · 0 评论 -
HashMap 容量为2次幂的原因
我们都知道 hashmap 的底层是一个数组加链表的结构,当向其中添加一个元素的时候,需要根据key的hash值,去确定其在数组中的具体位置。看源码,我们可以发现,确定数组位置的实现是 i=(n-1)& hash,其中 n 代表数组的长度,即map的容量。当n为2的幂次方时,(n-1)& hash 的值是均匀分布的,我们假设n=16,hash从0开始递增:hash...原创 2018-11-23 13:26:23 · 5390 阅读 · 1 评论 -
Semaphore 的运用
在Java并发编程中,Semaphore (信号量)主要用来控制线程并发的数量。主要方法:Semaphore(int permits):构造方法,创建具有给定许可数的计数信号量并设置为非公平信号量。Semaphore(int permits,boolean fair):构造方法,当fair等于true时,创建具有给定许可数的计数信号量并设置为公平信号量。void acquire()...原创 2018-12-12 23:51:38 · 307 阅读 · 0 评论 -
java8 optional 类的运用
常用方法: public static <T> Optional<T> of(T value);// 为Optional设值,值为空抛异常 public static <T> Optional<T> ofNullable(T value) ;// 为Optional设值,值为空不抛异常 public T get();// 如果...原创 2018-12-11 22:46:39 · 290 阅读 · 0 评论 -
正则表达式的运用
作为一个开发者,正则表达式是我们需要经常使用的,往常遇到总是直接百度网上的结果,最近由于python爬虫的学习,需要经常使用正则表达式,今天正好认真学一下。特殊字符字符描述^以什么开始$以什么结尾.代表任意单个字符+代表最少出现一次*代表前面字符可任意长度?代表非贪婪模式|代表或{2}代表前面字符出现的次数(即2次)...原创 2018-12-23 19:41:13 · 230 阅读 · 0 评论 -
java 中的深拷贝与浅拷贝
深拷贝与浅拷贝的区别在于:对于基本数据类型,浅拷贝和深拷贝都是直接拷贝的值。对于引用数据类型,浅拷贝拷贝的是引用(即内存地址,不开辟新的内存空间),深拷贝是开辟了新的内存空间,创建了相同值的对象。想要实现拷贝很简单,让被拷贝的对象实现Cloneable接口,然后重写Object的clone方法即可:@Getter@Setter@ToString@AllArgsConstructor...原创 2018-12-31 17:29:11 · 182 阅读 · 0 评论 -
Future 模式
future 的主要作用就是异步调用,让一些耗时的任务在后台慢慢处理,于此同时先去执行其他的任务。countdownlatch 其实也可以实现,只不过future更为强大,countdownlatch 只能获知任务的完成情况,不能得到任务的执行结果,future 则可以在任务执行完毕之后得到任务执行结果。一般我们使用futuretask和callable的组合。futuretask 常用方法:...原创 2019-01-23 12:55:56 · 195 阅读 · 0 评论 -
ThreadLocal 的总结
ThreadLocal 为每一个使用该变量的线程都提供了独立的副本,可以做到线程间的数据隔离,每一个线程都访问各自内部的副本变量。常用方法:public void set(T t);public T get();protected T initalValue(); //默认值为null一、set 方法1)、获取当前线程2)、根据当前线程获取 ThreadLocalMap3)...原创 2019-01-23 14:28:28 · 157 阅读 · 0 评论 -
Hashmap 的实现原理
put 操作:1.首先判断key是否为null,若为null,直接插入数组第一个位置,数组原来有的数据,下标依次后移加一2.若key不为null,计算key的hash值,取数组长度的模,得到其应该存储的数组位置3.若该位置无值,直接插入4.若该位置有值,判断链表中是否有key一样,有一样的话,覆盖原值,无一样的话,保存在链头get 操作:1.判断key是否为null,...原创 2018-11-21 13:00:29 · 144 阅读 · 0 评论 -
java 中整数左移右移的运算技巧
“ << " : 左移运算符,num << n, 相当于 num 乘以2的 n 次方" >> " : 右移运算符,num >> n, 相当于 num 除以2的 n 次方ps:1<<4 , 即 1×2^4=16;2<<3 , 即 2×2^3=16;3<&原创 2018-10-19 13:57:42 · 5583 阅读 · 2 评论 -
java 多线程之间的通信
在多线程的编码实现中,往往每个线程之间是相互协作实现的,或者说是有先后顺序的,多线程之间的通信能够避免对同一共享变量的争夺。一、wait()和 notify()1. wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。 当前的线程必须拥有当前对象的monitor,也即lock,就是锁。 线程调用wait()方法,释放它对锁的拥有原创 2017-04-06 14:21:15 · 940 阅读 · 0 评论 -
JSONObject 遍历各个字段值
一般json串:String Str = "{\"password\":\"123456\",\"username\":\"张三\"}";JSONObject jsonObj = JSONObject.fromString(jsonStr);String username = jsonObj.getString("username");String password = jsonObj.opt原创 2017-07-14 11:57:05 · 5441 阅读 · 0 评论 -
java 注解
一、JDK 自带注解:@Override //表示覆盖或重写父类的方法 @Deprecation //表示过时的方法@SuppressWarnings("deprecation") //表示忽略过时方法所带的警告二、注解的分类1、按运行机制,注解可分为三类: 1. 源码注原创 2018-02-05 20:13:58 · 231 阅读 · 0 评论 -
java 反射
一、获取Class实例的三种方式 Ps:Fool f=new Fool();Class c1=f.getClass; //已知类的名称Class c2=Fool.class; //已知类的实例对象Class c3=Class.forName("com.aa.bb.Fool"); //已知类的全限定名二、静态加载类与动态加载类1、静态加载类(编译时,加载的类是静态原创 2018-02-05 21:59:18 · 202 阅读 · 0 评论 -
volatile 关键字解析
原文出处 —- 本文主要对其进行简单归纳一. 内存模型的相关概念计算机在执行程序时,每条指令都是在CPU中执行的,程序运行过程中的临时数据是存放在主存(物理内存)当中的,由于CPU执行速度很快,而从内存读写数据较慢,为了不影响速度,CPU里面就有了高速缓存。当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读写数转载 2018-02-06 16:17:21 · 168 阅读 · 0 评论 -
IO 流的常用总结
IO 流主要是用来处理设备之间的数据传输,Java对于数据的操作都是通过流实现,而java用于操作流的对象都在IO包中。IO流常用的基类: * InputStream OutputStream字符流的抽象基类: * Reader Writer由上面四个类派生的子类名称都是以其父类名作为子类的后缀: 如...原创 2018-02-28 17:38:50 · 392 阅读 · 0 评论 -
关于线程池 ExecutorService 的总结
一 、Java通过Executors提供四种线程池: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。...转载 2018-04-29 10:33:41 · 744 阅读 · 0 评论 -
分布式环境下 session 的跨域共享原理
一、什么是 session 共享 ?如上图,是一个简单的分布式环境,以登录来说,当用户发出请求,通过负载均衡,可能会走tomcat1服务器,也可能会走tomcat2服务器,此时就有可能,我们在tomcat1上实现了登录,保存了session,但是tomcat2并没有保存,当有请求到tomcat2时,我们就需要重新登录,这就是session没有共享的实例。保持tomcat1和tomcat2的...原创 2018-07-24 01:29:17 · 1446 阅读 · 0 评论 -
JDK动态代理与CGLib动态代理
一、JDK 动态代理1.1 详细介绍:在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。1.1.1 InvocationHandler每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联了一个ha...转载 2019-03-27 13:20:47 · 183 阅读 · 0 评论