美文网首页
2017年9月面试

2017年9月面试

作者: 沧海月明猪有泪 | 来源:发表于2017-09-19 22:31 被阅读0次

    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会将消息重新放入队列安排下一次消费。

    相关文章

      网友评论

          本文标题:2017年9月面试

          本文链接:https://www.haomeiwen.com/subject/mfvgsxtx.html