分类 标签 存档 社区 博客 友链 GitHub 订阅 搜索

Java 面试

183 浏览

ZERO

    持续更新 请关注:https://zorkelvll.cn/blogs/zorkelvll/articles/2018/11/18/1542543461271

背景

https://segmentfault.com/a/1190000004716061

一、

1、Thread 和 Runnable 的区别:

    继承 Thread 类,实现 Runnable 接口 - java 不支持多继承,但支持多实现,使用 Runnable 更灵活些;

    Runnable 是可以共享数据的,即多个 Thread 可以同时加载同一个 Runnable,runnable 里面的资源是共享的!

    如何停止一个县线程?线程编写中的一些方法?

2、nginx 负载均衡:

    轮询、最小连接数、IP hash、权重

3、MySQL 事务和锁

    事务 ACID:

    事务隔离级别 - 4 种:读未提交、读提交(大部分数据库默认隔离级别)、可重读(Mysql)、可串行化

    共享锁和排它锁:

    MyISAM 和 InnoDB 的区别:MyISAM 类型不支持事务处理等高级处理,而 InnoDB 类型支持。MyISAM 类型的表强调的是性能,其执行数度比 InnoDB 类型更快,但是不提供事务支持,而 InnoDB 提供事务支持以及外部键、行级锁等高级数据库功能

4、jvm 垃圾回收机制的时机:

    引用计数器算法、根搜索算法

5、线程安全问题:   

    多线程环境下,多个线程操作共享数据,因此解决办法就是同步,多个线程使用同一个锁对象,具体的有:同步代码块、同步方法、静态同步方法

6、dubbo、服务治理:

    https://cloud.tencent.com/developer/article/1078966

    https://www.jianshu.com/p/9d062eceb765

7、ELK 工具:elasticsearch、logstash、kibana

8、docker、k8s、rancher、swarm

9、mybatis 的缓存原理:一级缓存 sqlSession 级别的(默认开启,同一个 sqlSession 中),二级缓存 Mapper 级别的(多个 sqlSession 可以共享的,同一个 namespace 中)

10、缓存问题:

    缓存穿透:查一个一定不存在的数据(解决办法,一是布隆过滤器即将所有可能存在的数据存在一个足够大的 bitmap 中,二是简单粗暴地缓存null 结果且该缓存过期时间设置很小如不超过 5 分钟)

    缓存雪崩:同一时刻大量缓存过期,给 DB 带来巨大压力(一是可以在原有失效时间基础之上加一个随机 1~5 分钟时间,二是用加锁或者队列的方式保证缓存的单线 程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上)

    缓存击穿:某一个缓存在某个时间点过期的时候,恰好在这个时间点对这个 Key 有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端 DB 压垮(简单分布式互斥锁(mutex key)、“提前” 使用互斥锁、不过期 (本文)、资源隔离组件 hystrix(本文)

11、如何使得一个栈的查找速度达到 O(1):牺牲空间,利用两个栈,另外一个栈单独用来存储当前栈位置处时已入栈的元素中的最小值,弹出时同时弹出!

12、spring bean 的加载过程

13、spring ioc 和 aop

14、设计模式

二、

1、MySQL 数据库索引的实现原理 - 平衡树

    支持索引类型 - B + 树索引、哈希索引、全文索引

    MyISAM 和 InnoDB 均使用 B + 树(平衡多路查找树)作为 索引结构:InnoDB 中数据文件本身就是索引文件,叶节点的 data 域存储完整的数据记录,索引 key 即为表的主键,且通过辅助索引查找获取到主键值然后再到主索引中获取到数据记录,是一种聚集索引;而 MyISAM 则有数据文件和索引文件,叶子节点 data 域中存储的是数据记录的地址,是一种非聚集索引

2、MySQL 索引更新的原理

3、MySQL 索引失效的情况

    where 条件中:or、in、函数、对索引列进行运算(+,-,*,/,! 等)

    where 条件中使用比较操作符 LIKE 和 REGEXP,且搜索模板中的第一个字符不是通配符的情况下索引才生效(如 LIKE ‘abc%‘索引生效,LIKE ‘%abc’索引失效)

    单列索引不存储 null 值,复合索引不存储全 null 值,null 查询索引无效

     列类型是字符串,如果不将数据使用引号则索引将失效

    JOIN 操作时,只有主键和外键的数据类型相同时,索引才生效

4、HTTP 状态码:

    200 OK  正常成功处理

    301 Moved Permantently 永久重定向

    302 Found 临时重定向

    400 Bad Request 请求报文存在语法错误或参数错误

    401 Unauthorized 发送的请求需要有 HTTP 认证信息或者是认证失败了

    403 Forbiddern 对请求资源的访问被服务器拒绝了

    404 Not Found 服务器找不到你请求的资源 

    500 Internal Server Error 服务内部错误

    204 No Content 请求已成功处理,但没有内容返回

    206 Patial Content 完成了部分 GET 请求

    503 Service Unavailable 服务器超负载或正停机维护,无法处理请求

5、spring 中事务的使用方式

    声明式:不需要对原有的业务做任何修改,通过在 XML 文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如 setXxx,xxxUpdate 等等

    注解式:只需要在 Spring 配置文件中定义一个事务管理对象(如 DataSourceTransactionManager),然后加入节点,引用该事务管理对象,然后即可在需要进行事务处理的类和方法使用 @Transactional 进行标注

6、如何自定义一个具有实际意义功能的注解?

    注解声明、注解解析(或者切面处理)、使用注解

注解相关:https://blog.csdn.net/u010889990/article/details/80333100

三、

1、乐观锁和悲观锁的区别,如何去实现一个乐观锁?

2、concurrentHashMap 在 jdk1.7 和 jdk1.8 中的区别是什么?

3、如何终止一个线程?

4、aop 不能使用的一些场景?

5、如何实现一个 spring-boot-starter 开箱即用的工程?

6、哪些情况下会出现栈溢出 OOM?

四、

1、多租户系统开发?sass、paas

2、springboot 统一异常处理

3、spring security 实现权限控制

五、

1、dubbo 服务注册原理是什么?

2、dubbo 服务间负载均衡是怎么实现的?dubbo 熔断如何实现的?

3、mysql 索引为什么使用的是 B + 二叉树?

4、蚂蚁基本上使用的都是 sofa 分布式框架?

5、为什么要使用 zookeeper?zookeeper 有什么优势?

6、做过前端开发,有自己的作品吗?网站域名是什么?

7、分布式系统中各个日志如何进行同步的?怎么实现统计网站访问量等图形界面的?

评论  
留下你的脚步
推荐阅读