![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
海涛czwx
努力工作,努力生活
展开
-
Spring mvc 架构流程及其组件
架构图:架构流程:1. 用户发送请求至前端控制器(DispatcherServlet)2. DispatcherServlet收到请求调用HandlerMapping(处理器映射器)3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成,统称为处理器执行链)一并返回给DispatcherServlet。4. DispatcherServlet通过Handler...原创 2018-03-08 16:27:19 · 204 阅读 · 0 评论 -
浅谈并发扣库存
秒杀的场景有很多,比如:抢购、抢票、抢红包等等。总之,就是在极短时间内有大量的请求。我们都知道,这种系统设计的大方向就是限流,即通过层层过滤,最终只让相对较少的请求进入到核心业务处理层。这里不谈秒杀设计,不谈使用队列等使请求串行化,就谈下怎么用锁来保证数据正确,就是已经到减库存那一步了,在这一步中如果保证不超卖。用队列的话,可以是Java自动的队列,也可以用Redis的LPUSH RP...原创 2019-04-05 16:34:38 · 617 阅读 · 0 评论 -
浅谈TCP三次握手和四次挥手
三次握手我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。第一次握手: A给B打电话说,你可以听到我说话吗? 第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗? 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦! 在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也...原创 2019-03-13 17:06:33 · 215 阅读 · 0 评论 -
Java高级程序员面试题大全
1、常用设计模式 单例模式:懒汉式、饿汉式、双重校验锁、静态加载,内部类加载、枚举类加载。保证一个类仅有一个实例,并提供一个访问它的全局访问点。 代理模式:动态代理和静态代理,什么时候使用动态代理。 适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 装饰者模式:动态给类加功能。 ...转载 2019-03-02 15:28:06 · 1236 阅读 · 0 评论 -
用两个栈实现队列
package test;import java.util.Stack;public class StackQueneTest { private Stack<Integer> stackA = new Stack<Integer>(); private Stack<Integer> stackB = new Stack<Integer&g...原创 2018-11-02 11:47:08 · 207 阅读 · 0 评论 -
2018面试题汇总
https://mp.weixin.qq.com/s/tMsI2aNnmHJlDfKUorhrVA转载 2018-10-26 10:38:25 · 163 阅读 · 0 评论 -
volatile 关键字 解析
对于volatile这个关键字,相信很多朋友都听说过,甚至使用过,这个关键字虽然字面上理解起来比较简单,但是要用好起来却不是一件容易的事。这篇文章将从多个方面来讲解volatile,让你对它更加理解。计算机中为什么会出现线程不安全的问题volatile既然是与线程安全有关的问题,那我们先来了解一下计算机在处理数据的过程中为什么会出现线程不安全的问题。大家都知道,计算机在执行程序时,每条...原创 2018-10-26 10:34:42 · 184 阅读 · 0 评论 -
String不可变
众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。...原创 2018-09-26 16:15:02 · 212 阅读 · 0 评论 -
分布式锁 -- 基于数据库实现
基于数据库来做分布式锁的话,通常有两种做法:基于数据库的乐观锁 基于数据库的悲观锁乐观锁:乐观锁机制其实就是在数据库表中引入一个版本号(version)字段来实现的。当我们要从数据库中读取数据的时候,同时把这个version字段也读出来,如果要对读出来的数据进行更新后写回数据库,则需要将version加1,同时将新的数据与新的version更新到数据表中,且必须在更新的时候同时检查目前...原创 2018-09-26 16:13:28 · 753 阅读 · 0 评论 -
分布式锁 -- 基于redis实现
基于Redis实现的锁机制,主要是依赖redis自身的原子操作,例如:SET user_key user_value NX PX 100redis从2.6.12版本开始,SET命令才支持这些参数:NX:只在在键不存在时,才对键进行设置操作,SET key value NX 效果等同于 SETNX key value PX millisecond:设置键的过期时间为millisecon...原创 2018-09-26 15:42:09 · 252 阅读 · 0 评论 -
分布式锁 -- 基于zookeeper实现
其实基于ZooKeeper,就是使用它的临时有序节点来实现的分布式锁。原理就是:当某客户端要进行逻辑的加锁时,就在zookeeper上的某个指定节点的目录下,去生成一个唯一的临时有序节点, 然后判断自己是否是这些有序节点中序号最小的一个,如果是,则算是获取了锁。如果不是,则说明没有获取到锁,那么就需要在序列中找到比自己小的那个节点,并对其调用exist()方法,对其注册事件监听,当监听到这个节...原创 2018-09-26 15:40:11 · 227 阅读 · 0 评论 -
JVM入门必看——JVM结构
转自:https://www.cnblogs.com/xuningchuanblogs/p/7688332.html转载 2018-10-01 10:29:00 · 240 阅读 · 0 评论 -
数据库与缓存一致性策略
问题:怎么保持缓存与数据库一致?要解答这个问题,我们首先来看不一致的几种情况。我将不一致分为三种情况:1. 数据库有数据,缓存没有数据;2. 数据库有数据,缓存也有数据,数据不相等;3. 数据库没有数据,缓存有数据。大多数人使用的策略,叫做 Cache Aside Pattern,简单来说就是:1. 首先尝试从缓存读取,读到数据则直接返回;如果读不到,就读数据库,并将数据会...原创 2018-07-18 09:40:44 · 295 阅读 · 0 评论 -
集合中存储的是对象的值还是对象的引用
如果是基本数据类型(基本数据类型对象),集合(List / LinkList / Map)存的是值,如果存的是对象,则集合存的是对象的引用,如下代码:import java.util.*;public class Main { public static void main(String[] args) { List list1 = new ArrayLis...原创 2019-04-06 17:41:18 · 2609 阅读 · 1 评论