JAVA
1.集合
ArrayList,LinkedList,Vector等区别
HashMap,LinkedMap,HashTable,SortMap,TreeMap等区别
2.代理
答:a.静态代理:
优点:不修改目标对象的前提下,对目标功能进行处理。
缺点:代理对象与目标对象实现相同的接口
b.JDK动态代理:
实现:生成接口的代理类,将AOP逻辑写入代理类,在运行时动态织入AOP,通过反射调用逻辑。
优点:代理对象不需要实现接口,利用static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )方法生成代理类
缺点:目标对象需要实现接口
c.Cglib动态代理:
实现:在运行期间,目标类的字节码加载后,生成目标类的子类,将切片逻辑加入到子类中。
优点:不需要实现接口
代理工厂需要实现MethodInterceptor接口
缺点:final类不能实现代理
3.线程
1.ThreadLocal:用ThreadLocal修饰的变量,都会为每一个线程创建一个副本。yi空间换时间,保障不发生并发问题。
2.ThreadLocal内存泄漏原因:ThreadLocalMap的生命周期与线程相同,若没有remove()key的话则会导致内存泄漏。
4.锁
答:synchronized原理:
a.当同步对象时,通过monitorenter和monitorexist指令实现;
b.当同步方法时,通过方法修饰符ACC_SYNCHRONIZED实现,在字节码中没有体现,但是在class文件的方法表中,将access_flags字段中的synchronized设置为1,锁的对象为此方法的类对象,调用此方法的对象;
c.当同步代码块时,monitorenter插入在开始,monitorexist插入在结束位置。
redis
1.redis有那些数据类型?
答:a.字符串类型 - 可以存储字符串,json字符串等,最大容量为512MB
b.HashMap -已key ,value 形式存储,key,value都只能为字符串,hashMap大小为2^31-1
c.list - 为一个双向链表,向两端添加元素的复杂度为O(1),通过索引访问就需要从第一个开始查询
d.set - 集合,元素不能重复
e.sortset - 有序集合
2.redis持久化
答:1.filesnapshotting:设置一个save n m ,也就是每过m/n秒后,redis fork一个子进程,子进程会将redis中的数据写入一个RDB的临时文件中,当写完之后,覆盖原来的RDB文件。这样的好处就是copy-on-write。
2.Append-only:当有数据修改时,就会将修改命令记录到AOF文件中。只要设置appendonly yes
appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用BGREWRITEAOF.
spring
1.spring 容器
2.springMVC
1.多例:@scope,但是多例下普通属性不会公用,静态属性会公用。
2.SpringMVC核心处理流程: a.DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射器
b.HandlerMapping处理器映射器,根据请求路径找到相应的HandlerAdapter处理器适配器(处理器适配器就是那些拦截器或Controller)
c.HandlerAdapter处理器适配器,处理一些功能请求,返回一个ModelAndView对象(包括模型数据、逻辑视图名)
d.ViewResolver视图解析器,先根据ModelAndView中设置的View解析具体视图
e.然后再将Model模型中的数据渲染到View上
3.spring AOP
答:1.before
2.afterretruning
3.around
4.spring IOC
答:对于spring来说,就是为了控制对象的生命周期以及依赖。过程:初始化的时候,将对象分解成beanid,beanType,properties.查找的时候就通过反射去创建这个对象实例,并将properties注入到对象属性。
5.spring 事务
一、传播属性:
1.PROPAGATION_REQUIRED :支持当前事务,如果没有,新建
2.PROPAGATION_SUPPORTS :支持当前事务,如果没有,以非事务执行
3.PROPAGATION_MANDATORY : 支持当前事物,没有,抛出异常
4.PROPAGATION_REQUIRES_NEW : 新建事务,存在,挂起当前事务
5.PROPAGATION_NOT_SUPPORTED : 以非事务执行,存在,挂起当前事务
6.PROPAGATION_NEVER : 以非事务执行,存在,抛出异常
7.PROPAGATION_NESTED : 存在,则在嵌套的事务中执行。否则,创建。
二、隔离级别:
1.DEFAULT:默认隔离级别
2.READ_UNCOMMITTED:最低的隔离级别,允许一个事务看到另外一个事务未提交的数据,产生脏读,不可重复读,幻象读取。
3.READ_COMMITTED:提交后才能读。
4.REPEATABLE_READ:可能出项幻象读。
5.SERIALIZABLE:花费最高,最可靠,事务为顺序执行。
分布式
1.分布式锁
redis分布式锁:1.setNx命令,成功获取,失败
2.查询时间是否超时,超时则重新getSet超时时间
2.分布式事务
a.两阶段提交协议:首先需要一个协调器。1.客户端发请求到协调器;2.协调器记录prepare日志。然后将prepare信息发送给事务执行器;3.事物执行器记录prepare日志,执行本机事务,但是不commit。执行成功发送yes,否则no;4.然后协调器根据所以事务执行器的返回结果来确定是commit,还是rollback.
缺点:多次多节点通信,通信时间太长;相对的事务执行时间变长,锁定的资源也变长;
b.三阶段提交协议:比两阶段提交协议增加了1.cancelCommit,协调器发请求确认是否能执行事务;2增加了超时处理;
c.利用消息队列实现两阶段提交协议;
mysql
1.数据库引擎
答:innerDB ,MyISAM,
区别:innerDB有事务,MyISAM没有事物;innerDB支持行级锁,MyISAM不支持;innerDB支持外键,MyISAM不支持;
2.数据库索引
3.数据库优化
协议
1.http/https
https需要CA证书,是SSL安全加密,默认端口443;
cookies:保存在客户端,内容:名称,值,过期时间,域和路径。不安全,可以篡改。保存数据大小不能超过4k.
session:保存在服务端,有服务端产生。
Http1.x:同一时间对单一的域名访问数量有限制;
Http2.x:使用了多路复用,对单一的http链接发起多重的请求,相应。在应用层(Http2)与传输层(TCP/UDP)中间增加了一个二进制分帧。
Http2:1.单链接多资源的方式,减小服务端的压力。内存占用更少,吞吐量更高
2.TCP/IP
组成:1.连路层:
3.RESTFUL
RPC框架
设计模式
秒杀系统
1.对现有业务的冲击
2.对数据库的负载
3.对带宽的要求
4.直接下单
Rabbitmq
a.生产者确认:
1.通过事务保证一致性:channel.txSelect();channel.txCommit();
2.设置channel的confirm模式:channel上的消息都会生成一个唯一id(从1开始),一旦消息推送到队列上,broker代理服务器就会像生产者推送一条消息,保护消息的唯一id
b.消费者确认:令noAck=false,当消费者调用完业务逻辑后,会显示的调用basicAck,这样mq就会将队列中的消息删除。如果此时消费者断开,mq会将消息重新放入队列安排下一次消费。