1.关于Java基础问题?
1.1 什么时候用get?什么时候用post?
(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据
2.关于项目架构及项目中逻辑问题?
3.关于JDK不同版本特性问题?
4.关于异常检测问题?
1.如果程序出了异常情况,除了查看线上日志外,或者线上日志记录的不是很详细,查找不到这个异常,应该怎么做处理?
了解下Arthas
5.关于JVM问题?
1.排查Java的CPU性能问题
1.ps | grep 组合命令, 方便快速找到进程id(java有自带的jps工具)
2.vi/tail/head/more/less: 查看线上日志的工具,注意不要用vim打开打日志,往往会给(内存)负担过重的服务器致命一击
3. awk 文本分析脚本,可以快速分析性能、业务日志,得出结果,不用等大数据平台一系列流程
4. top:查看进程(和线程)的cpu耗时,内存占用情况
5. iotop:查看进程和线程的IO消耗情况 (需要自行安装)
6. iftop:查看进程和线程的网络情况 (需要自行安装)
7. lsof:查看文件打开情况(含网络、本地文件、设备等)
8.JVM系列tools (本文重点)
8.1 jstat:查看进程内存分配和gc情况
8.2 jstack:查看进程的线程栈
8.3 jmap:dump java 内存。(不要对在线提供服务的应用做jmap)
8.4 btrace:运行中的代码调试
8.5 jprofile: 外挂的形式,分析具体到方法级别的相应耗时,压测配合jprofile,能直接找到瓶颈
IBM Memory Analyzer Tool, 简称MAT,用于分析 jmap 命令dump出来的内存文件
监控工具
10.1 zabbix:观察系统的历史性能状态(顺便告警)
10.2 ganglia:观察系统的历史性能状态
10.3 vision: 我司内部自研系统,观察业务的性能数据,QPS vs RT
10.4 各式APM工具,比如OneAPM,听云等,通过javaagent的方式实时分析程序的性能问题
6.关于GC问题?
7.关于多线程问题?
1.1 HashMap工作原理?
1.1 ConcurrentHashMap工作原理?
8.关于高并发问题?
9.关于SSM | SSH框架问题?
Spring中AOP在项目中应用场景有哪些?
SpringMVC的实现流程(常问到)?
Mybatis的分页是怎么做的?
10.关于设计模式?
1.常用的设计模式有单例模式、工厂模式、观察者模式、
2.项目中用到的设计模式有哪些?框架中用到的设计模式有哪些?
注意:学习设计模式的时候要常问自己:这个设计模式为了解决什么场景下的问题?有什么优点?有什么缺点?有没有更好的解决方案?
11.关于算法?
Spring的两大特性?
10.关于缓存问题?
1.Redis
2.Mongdb
3.Memcache
11.关于数据库性能问题?
1. 插入一万条数据,怎么插入?
2.switch语句后面不加break结果是什么?(基础中的基础问题)
switch语句后不加break,那么代码会一直顺序执行下去(忽略后面的case条件判断),直到break或是end语句
3.什么是进程,什么是线程?
- 进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。
- 线程是进程中的一个实体,是CPU调度和分派的基本单位;
3.1 线程之间是怎么通信的?
- 线程可以共享同一个数据源,记得加锁
- ThreadLocal实现线程内部数据的共享,不同线程数据不会共享‘
3.2 进程之间是怎么通信的? - 管道
- FIFO
- 消息队列
- 信号量
- 共享内存
3.3 两个线程之间有什么关联?
- 同步
- 互斥:线程间“锁住某一资源”的状态
4.什么是线程同步,什么是线程异步?
- 线程同步:是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低
- 线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制
4.什么是栈?什么是堆?
4.1 定义一个全局静态变量,存放在了栈中还是堆中?
- 带static就是在静态存储区
- 是存放于栈中
5.Redis把数据存储到db的策略是什么?
redis提供两种不同持久化方式来将数据存储到硬盘:
第一种:快照模式(RDB)可以将存在某一个时间点上所有数据写入硬盘
第二种:追加文件模式(AOF),在执行写命令时候将这条命令复制到硬盘
5. Redis集群是怎么实现数据同步的?
1.当一个从数据库启动时,会向主数据库发送sync命令;
2.主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来;
3.当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4.从数据库收到后,会载入快照文件并执行收到的缓存的命令。
5.Zookeeper是什么?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
5.1能做什么?
1.配置管理
2.名字服务
3.分布式锁
4.集群管理
5.Zookeeper是怎么选举leader的?
6. Zookeeper是怎么实现数据同步的?
7.如果程序出了异常情况,除了查看线上日志外,或者线上日志记录的不是很详细,查找不到这个异常,应该怎么做处理?
5.Spring中Bean的作用域?
9.数组用remove会出现异常吗?
10.除了用get和post请求外,你还用到过什么请求?
HTTP 从网络获取信息的四种方式:GET、POST、PUT、DELETE
网友评论