面试
写代码的小森森
上若善水
展开
-
Integer用==比较时127相等128不相等的原因
for (int i = 0; i < 150; i++) { Integer a = i; Integer b = i; System.out.println(i + " " + (a == b));}部分结果如下:124 true125 true126 true127 true128 false129 false130 false131...转载 2019-06-17 13:51:22 · 1503 阅读 · 1 评论 -
Linux网络编程中的五种I/O模型
1. 最通俗的方式讲解 什么是阻塞/非阻塞,什么是同/异步使用最通俗概念讲解 同步异步、堵塞和非堵塞洗衣机洗衣服 (无论阻塞式IO还是非阻塞式IO,都是同步IO模型)同步阻塞:你把衣服丢到洗衣机洗,然后看着洗衣机洗完,洗好后再去晾衣服(你就干等,啥都不做,阻塞在那边)同步非阻塞:你把衣服丢到洗衣机洗,然后会客厅做其他事情,定时去阳台看洗衣机是不是洗完了,洗好后再去晾衣服(等待期...原创 2019-04-30 16:55:12 · 620 阅读 · 0 评论 -
为什么redis可以做分布式锁,单线程的redis为什么快,4PX面试题
4PX面试题!!!第一问,有没有用过分布式锁?有,基于redis的分布锁第二问,redis为什么可以做分布式锁?Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。代码实现的,主要是针对某一笔数据的流水号加锁,防止多个线程写入这个数据。第三问,redis据你所知是单线程的,为什么redis还可以快?(这题不会,只知道是...原创 2019-04-23 18:21:02 · 4811 阅读 · 1 评论 -
阻塞队列理论以及使用
在多线程领域,所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦满足条件,被挂起的线程又会自动被唤醒。为什么需要BlockingQueue?好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue已经做好阻塞的控制。1.队列类型黄色标记的是重点!!!ArrayBlockingQueue:由数组结构组成的有界阻塞队列。inkedBlocki...原创 2019-04-23 16:04:45 · 660 阅读 · 0 评论 -
什么是公平锁,非公平锁,递归锁,独占锁(写锁),共享锁(读锁),自旋锁?
1.公平锁,非公平锁公平锁:就是很公平,在并发环境中,每个线程在获取时会先查看此锁维护的队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否则就会加入到队列中,以后会按照FIFO的规则从队列中取到自己。非公平锁:非公平锁比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式。// 非公平锁Lock lock = new ReentrantLock(); /...原创 2019-04-22 12:08:49 · 1974 阅读 · 0 评论 -
线程不安全之Set
面试题:HashSet线程不安全,为什么不安全?CopyOnWriteArraySet为什么安全?HashSet线程不安全,不安全的原因是因为HashMap不是线程安全的。在HashSet中,底层源码,其实就是一个HashMap,为HashMap的key为HashSet中的值,而value为一个Object对象常量。public class HashSet<E> extends A...原创 2019-04-21 19:08:56 · 715 阅读 · 0 评论 -
List线程不安全问题和写时复制(CopyOnWrite)
面试题:ArrayLIst线程不安全,请编写一个线程不安全的案例,并给出解决方案public class ListDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); /** * 1. 故障...原创 2019-04-21 18:55:12 · 875 阅读 · 0 评论 -
CAS与Unsafe讲解
1. 什么是CASCAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的并发原语,其作用是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在java语言中就是sun.misc.Unsafe类中的各种方法。调用Unsafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操...原创 2019-04-21 00:52:51 · 720 阅读 · 0 评论 -
DCL单例模式,用volatile关键创建
1. 单例模式单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。单例模式的好处:控制资源的使用,通过线程同步来控制资源的并发访问;控制实例产生的数量,达到节约资源的目的。作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。public class SingletonDemo { privat...原创 2019-04-20 18:25:00 · 1093 阅读 · 0 评论 -
volatile关键字和JMM
1.volatile关键字volatile关键字的java提供的轻量级同步机制保证可见性不保证原子性禁止指令重排2. JMM(java内存模型 Java Memory Model)JMM本身是一种抽象的概念,并不真实存在。它描述的是一组规则或规范。通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象)的访问方式。JMM关于同步的规定线程解锁前,必须...原创 2019-04-20 17:46:07 · 349 阅读 · 0 评论 -
java进程占用系统内存高,排查方法
1、top 查看具体是哪个进程吃内存较多,接下来我们以排查第一个为例2、定位线程问题(通过命令查看9534进程的线程情况),命令:ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd由此可以看到这PID:9534的进程产生了很多线程。接下来就可以通过jstack查看内存使用的堆栈。,具体可以执行ps p 9534 -L -o pcpu,...转载 2019-04-09 17:02:27 · 2795 阅读 · 1 评论 -
互联网安全-XSS攻击
什么是XSS攻击手段XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻击。例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端。XSS危害通过document.cookie盗取cookie使用js...原创 2019-01-14 11:51:48 · 329 阅读 · 0 评论 -
BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)
BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFa...转载 2019-09-16 16:01:37 · 328 阅读 · 0 评论