- 博客(44)
- 问答 (1)
- 收藏
- 关注
原创 面试总结(深圳第六天)
面试总是纷纷扰扰,等待结果妙不可言。 今日之惑: 1)分布式项目的实现原理 springcloud本身是一个servlet应用,而springboot则是嵌入式tomcat所以,需要一些胶水代码使得servlet应用跑在tomcat之中。springCloud的调用方式是restful,Spring Cloud也并不是和http+JSON强制绑定的,如有必要Thrift(Thrift除了可以...
2018-03-13 22:56:41 398 1
原创 面试总结(深圳第五天)
1、execute和submit的区别是: 1)可以收受的任务类型,execute只能接收runnable,而submit不仅可以,还能接收Callable类型 2)execute没有返回值,submit有返回值 2、HTTP三次握手 1)主机A向主机B发送一个位码,为1,主机B收到后就知道主机A要连入 2)主机B生成随机串并将1发送给A,A检查1是否正确 3)A发送1和随机串给B,此...
2018-03-12 22:09:04 403
原创 面试复习(深圳第四天)
今日阳光明媚,复习一下源码、多线程、IO、RPC、JVM※※※IO※※※ NIO由原来的阻塞读写(占用线程)变成了单线程轮询事件,找到可以进行读写的网络描述符进行读写。除了事件的轮询是阻塞的(没有可干的事情必须要阻塞),剩余的I/O操作都是纯CPU操作,没有必要开启多线程。 总结来说,传统的IO跟NIO的区别: 1、传统IO面向流,读一写一,NIO面向缓冲,也就是块,所以速率显著提高; ...
2018-03-11 13:01:07 267
原创 面试复习(深圳第三天)
※※※Spring IOC的实现方式※※※ 1、XML配置(不推荐,xml文件太多,不易于管理) 2、自动装配(推荐,使用spring注解和xml配合,这种方式也是比较普遍的) 3、零配置(不推荐,因为项目上线后难以修改)※※※既然提到IOC,就深入学习Spring BeanFactory原理※※※ 1、BeanFactory是Spring容器的基础接口 2、BF是通过反射的方式来创...
2018-03-09 18:35:59 369
原创 深圳(第二天)
早上起来,有一点小兴奋,等待HR查看我的简历,深圳真是个神奇的地方,非常吸引人,很开心有这么多小伙伴在深圳,看着他们,我也感觉我成了这里的一员,但是我还是找工作,哈哈哈,坚持就是胜利!加油!开始我的学习之旅。 今天走了2W步,感受了一下深圳的气息,果然不错!...
2018-03-09 09:16:48 237
原创 类加载器
1、加载 过程:取得类的二进制流,转为方法区数据结构,在JAVA堆中生成对应的java.lang.Class对象 2、链接 2.1、验证 文件格式验证:文件格式,版本号 元数据验证:是否有父类,是否继承final类,非抽象类是否实现了抽象类的所有方法 字节码验证:运行检查(堆栈使用是否长度一致),是否跳转到合理位置...
2018-02-09 16:01:34 186
原创 Netty服务器和客户端交互案例
Netty服务器和客户端交互案例简述:使用netty完成通讯简单的例子服务器端代码:package netty;import java.net.InetSocketAddress;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ServerBootstrap;import or
2018-01-19 00:03:30 1593
原创 FutureTask源码阅读与理解
FutureTask源码阅读与理解简述:FutureTask实现了Runnable和Future接口,代表此类可以被线程池调度和异步执行任务。几个变量: //以下是state的几种状态 private volatile int state; private static final int NEW = 0; private static
2018-01-18 23:33:49 191
原创 JAVA版Future模式实现代码
JAVA版Future模式实现代码思路: 1、调用方发送数据给被调用方并起一个线程等待数据填充, 2、被调用方立马返回数据并启动一个线程处理, 3、处理完把数据交给调用方并唤醒调用方线程。调用方代码:import java.util.concurrent.locks.ReentrantLock;/** * @author 作者:hui E-mail: 137437006@qq.com* @
2018-01-18 18:21:24 1006
原创 Executors源码阅读与理解
简述:此类是Executor(线程池的超级接口)的工具类,提供众多静态方法创建线程池!/*newFixedThreadPool 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。
2018-01-17 17:07:52 250
原创 JAVA常用的几种线程池
JAVA常用的几种线程池1、newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。 如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(
2018-01-17 16:57:19 406
原创 JAVA深浅拷贝
深拷贝:重新new一个一模一样的对象,内存引用地址不一样。 浅拷贝:如果是基本类型的数据则是不同的对象,即内存地址不一样;如果是一个对象则引用的地址一样。
2018-01-16 18:23:10 268
原创 二十三种设计模式(白话版)
二十三种设计模式(白话版)tips:作者以尽量精简的语言让大家得到对二十三种设计模式的理解,但是对于这些设计模式,还是得多敲多看代码才能领悟其中的精髓!======================================================================一、设计模式的分类总体来说设计模式分为三大类:创建型模式,顾名思义:把new的过程交给第
2018-01-16 18:11:57 1855
原创 JAVA垃圾回收机制(GC算法)
JAVA垃圾回收机制(GC算法)首先了解一下有哪些垃圾回收算法:1、引用计数法 老牌垃圾回收算法 对象中存在引用计数器,如果被引用则+1,若失去引用则-1,当=0的时候就回收。 算法问题:加减增加了计算成本,互相引用的问题难以解决2、标记-清除算法 比如内存是一个表格,那么把第一个节点当成树的根节点,从根节点到所有可达的对象均会被标记,其他的则被清理。3、标记-压缩算法
2018-01-15 15:35:06 215
原创 Collections源码阅读与理解
Collections源码阅读与理解 简介:此类的作用是对Colletion包,是针对List接口下的集合进行排序、查找等操作的管理类。//带你走进sort方法 @SuppressWarnings("unchecked") public static super T>> void sort(List list) { list.sort(null); }
2018-01-12 15:40:29 253
原创 归并排序
package sort;import java.util.Arrays;/** * @author 作者:hui E-mail: 137437006@qq.com* @version 创建时间:2018年1月12日 上午9:41:32 * 类说明 */public class GB { //入口,归并排序的重点是先分割成小块,排好序再排大块,一级一级往上排 pub
2018-01-12 11:17:45 215
原创 NIO服务器和客户端通讯简单例子
NIO服务器和客户端通讯简单例子废话不多说直接上代码。 首先是服务端代码:package nio;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import
2018-01-11 23:54:11 265
原创 ArrayBlockingQueue源码阅读与理解
ArrayBlockingQueue源码阅读与理解简介:FIFO队列,运用重入锁配合Condition控制多线程进出,算法:运用一个Object数组,插入顺序0->length->0满了则等待,0->length->0逐个取空了想取也等待。几个变量: //数据存储 final Object[] items; //取数据指针 int takeIndex;
2018-01-09 10:32:58 357
原创 Vector和Hashtable源码阅读与理解
Vector是线程安全的ArrayList:public synchronized void insertElementAt(E obj, int index) { modCount++; if (index > elementCount) { throw new ArrayIndexOutOfBoundsException(index
2018-01-09 10:00:29 198
原创 类的加载
public class Test{ public static void main(String[] args) { Father ts = new Son(); }}class Father { { System.out.println("父类 非静态块 1 执行"); } static { Sys
2018-01-08 00:23:34 165
原创 LinkedList源码阅读与理解
LinkedList源码阅读与理解几个变量: //记录长度 transient int size = 0; //记录头节点 transient Node first; //记录尾节点 transient Node last; //核心类 private static class NodeE> { //记录valu
2018-01-06 14:28:00 205
原创 ReentrantLock源码阅读与理解
ReentrantLock源码阅读与理解 tips:在读这篇文章之前请先理解本博客对AQS这个类的阐述:传送门。本文针对的是理解AQS框架的基础上进行说明的。简介:重入锁具有可重入,可限时,可中断,可公平四个特性。几个属性和几个方法: //Sync这个类至关重要继承了AQS,也是重入锁的核心类之一 private final Sync sync; //这个抽
2018-01-06 13:58:08 174
原创 AbstractQueuedSynchronizer源码阅读与理解
AbstractQueuedSynchronizer源码阅读和理解 简述:这个抽象类是J.U.C的锁同步的基础框架(简称:AQS),与之相关的锁同步实现类有:ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch、FutureTask……这个类使用CLH队列,让我们来一探究竟。tips:所谓CLH锁是并行计算中自旋锁的实现机
2018-01-05 14:07:03 1385
原创 ConcurrentLinkedQueue源码阅读与理解
ConcurrentLinkedQueue源码阅读与理解 简述:该容器是无锁无边界的队列FIFO链表。几个变量://记录头节点(不一定指向头,缓更新)private transient volatile Node head;//记录尾节点(不一定指向尾,缓更新)private transient volatile Node tail;//数据结构private static
2018-01-05 11:13:05 278
原创 JAVA基本类型占据字节数比特位
JAVA基本类型占据的字节数,须知: byte :8个bit (bit就是比特位的意思) byte :1个字节 (byte就是字节的意思) char :2个字节 short :2个字节 int :4个字节 boolean :4个字节 float :4个字节 long :8个字节 double :8个字节
2018-01-03 17:33:03 1312
原创 Thread类的使用
前言: 每一个类都有wait(),notify()的方法,简单理解这两个方法: 1、对象维护了一个等待队列list; 2、线程A中执行对象的wait方法,把线程A保存到list中; 3、线程B中执行对象的notify方法,从等待队列中取出线程A继续执行;文中中断方法的使用方法摘抄至:https://www.cnblogs.com/onl
2018-01-03 16:47:40 204
原创 实现一个无锁的Stack,并写一段测试代码(多线程访问),证明这个Stack是线程安全的。给出程序以及运行的截图。
实现一个无锁的Stack,并写一段测试代码(多线程访问),证明这个Stack是线程安全的。给出程序以及运行的截图。 //关键点:无锁须利用CAS类 //data static private AtomicInteger j = new AtomicInteger(0); //控制插入的指针 static private AtomicInteger
2018-01-03 15:29:21 967 2
原创 使用 wait notify 实现一个队列,队列有2个方法,add 和 get 。add方法往队列中添加元素,get方法往队列中获得元素。队列必须是线程安全的。如果get执行时,队列为空,线程必须阻塞
使用 wait notify 实现一个队列,队列有2个方法,add 和 get 。add方法往队列中添加元素,get方法往队列中获得元素。队列必须是线程安全的。如果get执行时,队列为空,线程必须阻塞等待,直到有队列有数据。如果add时,队列已经满,则add线程要等待,直到队列有空闲空间。使他工作在多线程的环境下,证明,它的工作是正确的。给出程序和运行的截图。//关键点: wait() notify
2018-01-03 15:26:23 992
原创 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行
现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行 //思路:利用join() public static void main(String[] args) throws Exception { Thread t1 = new Thread(){ @Override public vo
2018-01-03 15:23:55 389
原创 锁的种类
锁的种类划分:公平锁/非公平锁,线程获取锁是否有顺序可重入锁,获得锁的线程可以重复加锁从某些程度上避免了死锁的产生独享锁/共享锁,当线程获得锁时其他线程是否能操作锁住的资源区域。eg:Synchronizer和ReentrantLock就是独享锁,ReadWriteLock的读是共享锁,写是独享锁!乐观锁/悲观锁,上锁--》临界区--》执行(悲观,认
2017-12-27 17:59:37 300
原创 如何定制化序列化过程
1、继承Serializable接口2、实现writeObject(ObjectOutputStream oos)和readObject(ObjectInputStream ois)两个方法
2017-12-21 17:43:58 225
原创 ArrayList源码的阅读与理解
JDK1.8ArrayList源码分析ArrayList几个对象:1、默认容量,默认为10。tips:在new ArrayList()的时候并不会创建一个长度为10的数组,这个数值在add的时候如果发现没有指定容量会初始化一个10长度的Object[]给它2、空对象数组。主要用于length=0时赋值
2017-12-21 17:12:15 214
原创 transient关键字妙用
你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
2017-12-21 17:06:31 216
原创 HashMap源码阅读与理解
HashMap几个参数:默认初始化大小。tips:为什么must be a power of two呢,因为在put元素的时候会进行(length-1)&hashcode操作,2的幂次方-1等于N个1!最大容量。加载因子。0.75*当前容量大小就是判断是否扩容的标准,而每次扩容都是节点阈值。这个值就是当某个节点放入超过
2017-12-20 17:07:25 258
原创 Windows的CMD控制台输出到TEXT文档
eg:1、在e:目录下创建文本文件test.txt2、在提示符下输入ping 0.0.0.0 -t > e:test.txt打开文件即可看到输出内容
2017-12-19 10:55:52 3448
原创 多线程初识四
NIO and AIO New I/O 与旧式的基于流的I/O相对再JDK1.4纳入,特点:1、NIO基于块Block,原来IO是基于流的2、为所有的原始类型提供Buffer缓存支持3、增加通道Channel对象4、支持锁和内存映射文件的文件访问接口5、提供了基于Selector的异步网络I/O总结:1、Buffer类似bean,通道Channel是具体
2017-12-17 21:52:30 156
原创 多线程初始三
认识jetty1、new Server()所做的事情:初始化线程池-->QueuedThreadPool-->execute()方法把任务加入job-->任务推入BlockingQueue(具体实现,这个是阻塞队列可待优化)初始化ServerConnector-->初始化ScheduledExecutorScheduler && ByteBufferPool(对
2017-12-17 19:02:48 172
空空如也
weblogic部署war包,报日记文件找不到
2020-04-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人