2020JAVA面试题

1.springmvc流程
具体步骤:
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置、注解进行查找)
第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
第十一步:前端控制器向用户响应结果
参考:https://www.cnblogs.com/leskang/p/6101368.html

2.注解来自于哪里,怎么使用?
注解源于 jdk,如果要使用注解可以使用反射找到包含该注解的类和方法,然后对用了注解的类和方法处理即可

3.aop应用场景?
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging  调试
logging, tracing, profiling and monitoring 记录跟踪 
优化 
校准
Performance optimization 性能优化
Persistence   持久化
Resource pooling  资源池
Synchronization  同步
Transactions 事务
参考:https://blog.csdn.net/wuruijiang/article/details/78970720
权限认证、日志处理、异常处理

4.redis的应用,redis是否有事务
缓存
分布式锁
使用场景:
a.记录帖子的点赞数、评论数和点击数 (hash)。
b.记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。
c.记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。
d.记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。
e.缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (hash)。
f.记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)。
g.如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(计数器)。
h.收藏集和帖子之间的关系 (zset)。
i.记录热榜帖子 ID 列表,总热榜和分类热榜 (zset)。
j.缓存用户行为历史,进行恶意行为过滤 (zset,hash)。
5.项目架构
springcloud+mysql集群+redis集群+elasticsearch集群+apollo集群+tomcat集群

6.es solr 底层基于什么实现
lucene,数据结构是倒排序索引,
举例说明:正常我们查询某些词都是先从书本中查找,倒排序索引是我们把书中的词获取后将含有该词的书本记录
Elasticsearch 与 Solr 的比较总结
二者安装都很简单;
Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
参考:https://www.cnblogs.com/pc-boke/articles/9851521.html

7.java8的新特性
a.lambda表达式
b.时间类型增加个LocalDateTime LocalDate Instance
c.接口增加了默认方法
d.函数式接口
e.concurrentHashMap底层数据接口改成红黑树,解决了死锁
f.多重注解
g.lambda表达式内访问对象字段和静态变量
h.lambda表达式内可以访问局部变量
i.方法与构造函数引用 通过 :: 可以获取构造函数的引用

参考:https://www.jianshu.com/p/0bf8fe0f153b

8.分库分表分页怎么查询

9.分布式事务

参考:https://www.jianshu.com/p/ee4071d0c951
http://springcloud.cn/view/374

10.mysql优化
索引
少使用order by
少使用group by

11.mysql执行引擎
myisam
innodb

12.springcloud之间的通信
feign

13.springcloud的部署是怎样的

14.mybatis的一级缓存 二级缓存的区别?
一级缓存:默认开启
二级缓存:默认不开启
参考:https://www.cnblogs.com/happyflyingpig/p/7739749.html

15.分库分表分页怎么查询?

16.eureka的心跳机制是什么

17.feign底层怎么交互的

18.防刷短信验证码,用户登录的时候,发现大量不同的ip不同的手机号用验证码登录,怎样防止大量验证码盗刷

19.高并发场景下怎样保证缓存和DB的数据一致 提示:比如用redis缓存,更新操作是先删缓存更新数据库,还是更新数据库了再更新缓存,会出现什么问题

20.5张表、每个表5列,每张表数据3000w,库存表数据怎样能快速查询出来,怎样设计:

21.半夜突然收到系统提示OOM,Eden快速使用了又释放,old全部耗尽了,怎样定位问题?

22.怎样保证幂等,你们怎么做的?

23.客户端数据怎样保证安全性,调用接口之前? 比如身份证号码,手机号调用接口之前怎样保证用户隐私,我说了对称加密,他问客户端怎样拿密钥,没答上来

24.怎样防止数据被篡改,你知道的防数据篡改的方式有哪些

25.微服务权限怎么控制

26.分布式事务怎么做的
常见方案:2PC TCC 本地消息事务 rocketmq消息处理

参考:https://hhbbz.github.io/2018/09/06/%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E7%9A%84%E5%9B%9B%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/
http://server.it168.com/a2018/0623/3210/000003210898.shtml
https://mp.weixin.qq.com/s/u29tU3lHJdtpB9AJBCyGkg

27.springboot的优缺点

28.springcloud的优缺点

29.elasticsearch索引怎么设计?

30.springboot启动有几种方式?

31.springboot集成redis有几种方式?

32.heap、stack区别?

33.redis的数据类型?
String
Hash
List
Set
ZSet

34.java导出dump的方式?
jmap -dump:live,format=b,file=heap.bin

35.forward redirect的区别?
forward:转发
redirect:重定向

36.创建线程池的方式,线程池一般配置多大?
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}

Executors
/**
*创建固定数线程的线程池
*/
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue());
}

/**

  • 创建单个线程池
    */
    public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
    (new ThreadPoolExecutor(1, 1,
    0L, TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue()));
    }

public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue());
}

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}

37.yaml是什么?

38.熟悉哪些设计模式,写出伪代码
单例设计模式
工厂模式
装饰设计模式
代理设计模式
适配器模式
构建者设计模式
参考:

39.手写冒泡排序算法

public static void bubbleSort(int[] arrays, boolean flag) {
        int tmp;
        for (int i=0;i arrays[j]) {
                        tmp = arrays[i];
                        arrays[i] = arrays[j];
                        arrays[j] = tmp;
                    }
                } else {
                    if (arrays[i] < arrays[j]) {
                        tmp = arrays[i];
                        arrays[i] = arrays[j];
                        arrays[j] = tmp;
                    }
                }
            }
        }
    }

40.接口与抽象类的区别?

41.字符串abcd怎样获取abcd、acbd、acdb、adbc、adcb、bacd、bcad、bdac、bdca、cabd、cdba、cadb、cbda等

42.feign的实现原理?feign是否包含负载均衡?

43.三范式是什么?
三范式

1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;

解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;

44.图书管理系统该设计多少张表?

45.组合索引b c d where cbd abd dca 是否走索引?

46.悲观锁、乐观锁的概念?

47.线上出现悲观锁了怎么处理?

48.springboot读取配置文件的方式?
@Value
@Autowired
Environment
@ConfigurationProperties

49.springcloud项目中用了哪些模块?
eureka:注册中心
feign:模块间通信
ribbon:负载均衡
hystrix:熔断
zuul:网关路由

50.jenkins的部署流程是怎样的?
git拉取代码
maven编译
tomcat部署

51.服务器查询某个时间段的包含"service"的日志用什么命令?
sed

52.服务器查看服务端口的命令?
netstat -anp

53.怎样查找某个端口号被占用?
lsof -i:port

54.怎样关闭某个端口或者进程?
netstat -anl | grep tomcat

kill -9 进程id
55.怎样创建线程池?如果线上的任务量远大于线程池处理线程的量怎么用代码解决?

56.redis通常用于干嘛?redis怎么实现?
a.缓存
b.分布式锁

57.springboot默认使用的服务器是哪个?
tomcat

58.elasticsearch底层索引怎么设计?
基于lucene 倒排序索引

59.线上是否使用docker部署过项目?

60.springboot读取配置文件热加载机制是什么?

61.linux给文件夹授权的命令?
chmod -r dir

62.rabbitmq exchange干嘛的?

63.nginx负载均衡怎么配置?
upstream backserver {
server 192.168.2.12:8001;
server 192.168.2.13:8002;
}

最简单的配置:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
    }
}

}

最少连接负载均衡
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

ip_hash方式
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;

}

根据权重配置:
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}

参考:
http://nginx.org/en/docs/http/load_balancing.html
https://blog.csdn.net/qq_35119422/article/details/81505732

64.微服务中出现的问题?
部署问题,增加运维部署压力
分布式事务

65.hashmap底层结构怎样的?(问的较多)

66.ConcurrentHashMap怎样实现线程安全的?
分段锁

67.CAS底层数据结构有看过吗?

68.jvm中的垃圾收集算法有哪些?堆可以细分为哪些区域,什么对象会移到老年代,除了要被回收的对象移到老年代,其他什么情况直接移到老年代?

69.千万条数据查询10s怎么去优化?

70.数据库分库分表怎么做?

71.mysql分库分表用的什么插件还是自己写的算法实现?

72.多线程线程池使用Executors的方法还是?

73.日志的链路追踪怎么做的?

Struts2与springmvc区别

mybatis hibernate区别
hibernate:全自动化
mybatis:半自动化

mybatis如果从oracle切到mysql怎么处理?

springmvc流程?

springboot核心?
starter
自动装配
springboot cli
actuator
参考:https://blog.csdn.net/YYZZHC999/article/details/97619997

进程是什么,线程是什么?

进程之间通过什么方式通信?
共享内存、管道、消息队列、socket、文件、信号量

wait() sleep()的区别,在哪个类中?
wait() java.lang.Object
sleep() java.lang.Thread

创建线程的几种方式?
继承Thread
实现Runnable接口

常见的异常有哪些?java怎样知道该抛对应的异常,比如NullPointerException?
NullpointerException
FileNotFoundException
InterruptedException
IllegalArgsException
ClassNotFoundException
ClassCastException
IOException

jvm怎样加载class文件的,有哪些步骤,对象创建后存在哪里?静态常量值存在哪里?

ArrayList LinkedList区别?
ArrayList:数组结构,查询快
LinkedList:链表结构,更新快

线程安全的集合有哪些?
Vector

你可能感兴趣的:(2020JAVA面试题)