随笔分类 -  面试

摘要:1、自定义注解 @target 说明了Annotation所修饰的对象范围: constructor、method、field、package、type等等。 @retention 定义了该Annotation被保留的时间长短, source(源文件保留)、class( class保留)、runti 阅读全文
posted @ 2019-12-18 22:54 clawhub 阅读(163) 评论(0) 推荐(0)
摘要:1、内存模型 1.1、堆 1. 堆是所有线程共享的,主要存放对象实例和数组。 2. 新生代和老年代的比例是1:2。 3. 新生代中三个区域的比例是 8 : 1 : 1。 1.1.1、新生代 对象分配在eden区中,当eden区满时会触发minor gc,将eden区中存活的对象,复制到survivo 阅读全文
posted @ 2019-12-18 22:53 clawhub 阅读(246) 评论(0) 推荐(0)
摘要:1、转发与重定向的区别 1. 转发是服务器请求资源,服务器直接访问目标地址url,把响应内容返回给浏览器。 重定向根据服务器返回的状态码重新请求地址。 2. 转发是服务器行为,重定向是客户端行为。 3. 转发显示的url不变而重定向显示新的url。 4. 转发页面和转发到的页面共享request的信 阅读全文
posted @ 2019-12-18 22:52 clawhub 阅读(149) 评论(0) 推荐(0)
摘要:1、类加载过程 1.1、加载 查找和导入class文件。 1.2、链接 验证 检验载入的class文件的正确性,完整性。 准备 给类的静态变量分配存储空间,会赋对象类型的默认值。 解析 将class常量池中的符号引用转换成直接引用。 符号引用和直接引用的区别: 符号引用:java编译阶段不知道所引用 阅读全文
posted @ 2019-12-18 22:50 clawhub 阅读(244) 评论(0) 推荐(0)
摘要:1、锁状态 锁的状态只能升级不能降级。 无锁 没有锁对资源进行锁定,所有线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。其他修改失败的线程会不断重试,直到修改成功,如CAS原理和应用是无锁的实现。 偏向锁 偏向锁是指一段同步代码一直被一个线程访问,那个该线程会自动获取锁,降低获取锁的代价 阅读全文
posted @ 2019-12-18 22:49 clawhub 阅读(260) 评论(0) 推荐(0)
摘要:1、五种阻塞队列介绍 ArrayBlockingQueue 有界队列,底层使用数组实现,并发控制使用ReentrantLock控制,不管是插入操作还是读取操作,都需要获取锁之后才能执行。 LinkedBlockingQueue 底层基于单向链表实现,既可以当做有界队列,也可以当做无界队列使用。使用两 阅读全文
posted @ 2019-12-18 22:48 clawhub 阅读(336) 评论(0) 推荐(0)
摘要:1、ArrayList的扩容机制 1. 每次扩容是原来容量的1.5倍,通过移位的方法实现。 2. 使用copyOf的方式进行扩容。 扩容算法是首先获取到扩容前容器的大小。然后通过oldCapacity (oldCapacity 1) 来计算扩容后的容器大小newCapacity。这里用到了 右移运算 阅读全文
posted @ 2019-12-18 22:46 clawhub 阅读(178) 评论(0) 推荐(0)