面试题整理

其他
1. 什什么是幂等?什什么情况下需要考虑幂等?你怎么解决幂等的问题?

编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

Java
1. 多个线程同时读写,读线程的数量量远远?大于写线程,你认为应该如何解决
并发的问题?你会选择加什什么样的锁?

引入读写锁

ReadWriteLock rwl = new ReentrantReadWriteLock()

读锁:

rwl.readLock().lock()

写锁:

rwl.writeLock().lock()

2. JAVA的AQS是否了了解,它是?干嘛的?

AbstractQueuedSynchronized(AQS) ,抽象的队列式的同步器
3. 除了了synchronized关键字之外,你是怎么来保障线程安全的?
4. 什什么时候需要加volatile关键字?它能保证线程安全吗?

volatile 线程可见性。不能保证线程安全
5. 线程池内的线程如果全部忙,提交?一个新的任务,会发?生什什么?队列列全部
塞满了了之后,还是忙,再提交会发?生什什么?

会加入到blockingqueue. 如果此时没有超过最大线程数,会new 一个非核心线程来处理,如果超过了最大线程数,会触发rejection.
6. Tomcat本身的参数你?一般会怎么调整?

7. synchronized关键字锁住的是什什么东?西?在字节码中是怎么表示的?在内
存中的对象上表现为什什么?
8. wait/notify/notifyAll?方法需不不需要被包含在synchronized块中?这是为什什
么?

需要。
9. ExecutorService你?一般是怎么?用的?是每个service放?一个还是?一个项?目
?里里?面放?一个?有什什么好处?
Spring
1. 你有没有?用过Spring的AOP? 是?用来?干嘛的? ?大概会怎么使?用?
2. 如果?一个接?口有2个不不同的实现, 那么怎么来Autowire?一个指定的实现?

这个时候就要用到@Qualifier注解了,qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,我们修改调用代码,添加@Qualifier注解,需要注意的是@Qualifier的参数名称必须为我们之前定义@Service注解的名称之一!

3. Spring的声明式事务 @Transaction注解?一般写在什什么位置? 抛出了了异常
会?自动回滚吗?有没有办法控制不不触发回滚?

不一定,sprint 对于RuntimeException会触发回滚,而对于普通的checked 的exception, 不触发回滚,还是会修改数据库记录。
4. 如果想在某个Bean?生成并装配完毕后执?行行?自?己的逻辑,可以什什么?方式实
现?
5. SpringBoot没有放到web容器??里里为什什么能跑HTTP服务?
6. SpringBoot中如果你想使?用?自定义的配置?文件?而不不仅仅是
application.properties,应该怎么弄弄?
7. SpringMVC中RequestMapping可以指定GET, POST?方法么?怎么指定?
8. SpringMVC如果希望把输出的Object(例例如XXResult或者XXResponse)这
种包装为JSON输出, 应该怎么处理理?

spring mvc输出Json数据

依赖的jar包:

jackson-core-asl-1.8.7.jar

jackson-mapper-asl-1.8.7.jar

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-lgpl</artifactId>
    <version>1.9.13</version>
</dependency>

第一种方式:(ResponseEnity)

使用ResponseEnity

@Controller
public class JSONController {
   @RequestMapping(value={"/{name}"}, method=RequestMethod.GET)
   public ResponseEntity<Shop> hello(@PathVariable String name) {
       Shop shop = new Shop();
       shop.setName(name);
       shop.setStaffName(new String[]{"zwh1","zwh2"});
       return new ResponseEntity<Shop>(shop,HttpStatus.OK);
   }
}

输出Json: {"name":"zzz","staffName":["zwh1","zwh2"]}

第二种方式:(@ResponseBody)

使用@ResponseBody

@Controller
public class JSONController {
   @RequestMapping(value={"/{name}"}, method=RequestMethod.GET)
   public @ResponseBody Shop hello(@PathVariable String name) {
       Shop shop = new Shop();
       shop.setName(name);
       shop.setStaffName(new String[]{"zwh1","zwh2"});
       return shop;
   }
}

输出Json: {"name":"zzz","staffName":["zwh1","zwh2"]}

9. 怎样拦截SpringMVC的异常,然后做?自定义的处理理,?比如打?日志或者包装
成JSON
MySQL
1. 如果有很多数据插?入MYSQL 你会选择什什么?方式?
2. 如果查询很慢,你会想到的第?一个?方式是什什么?索引是?干嘛的?
3. 如果建了了?一个单列列索引,查询的时候查出2列列,会?用到这个单列列索引吗?
4. 如果建了了?一个包含多个列列的索引,查询的时候只?用了了第?一列列,能不不能?用上
这个索引?查三列列呢?
5. 接上题,如果where条件后?面带有?一个 i + 5 < 100 会使?用到这个索引吗?
6. 怎么看是否?用到了了某个索引?
7. like %aaa%会使?用索引吗? like aaa%呢?
8. drop、truncate、delete的区别?
9. 平时你们是怎么监控数据库的? 慢SQL是怎么排查的?
10. 你们数据库是否?支持emoji表情,如果不不?支持,如何操作?
11. 你们的数据库单表数据量量是多少??一般多?大的时候开始出现查询性能急
剧下降?
12. 查询死掉了了,想要找出执?行行的查询进程?用什什么命令?找出来之后?一般你
会?干嘛?
13. 读写分离是怎么做的?你认为中间件会怎么来操作?这样操作跟事务有
什什么关系?
14. 分库分表有没有做过?线上的迁移过程是怎么样的?如何确定数据是正
确的?
JVM
1. 你知道哪些或者你们线上使?用什什么GC策略略? 它有什什么优势,适?用于什什么
场景?

GC 策略

  • Serial收集器 一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。 特点:CPU利用率最高,停顿时间即用户等待时间比较长。 适用场景:小型应用 通过JVM参数-XX:+UseSerialGC可以使用串行垃圾回收器。
  • Parallel收集器 采用多线程来通过扫描并压缩堆 特点:停顿时间短,回收效率高,对吞吐量要求高。 适用场景:大型应用,科学计算,大规模数据采集等。 通过JVM参数 XX:+USeParNewGC 打开并发标记扫描垃圾回收器。
  • CMS收集器 采用“标记-清除”算法实现,使用多线程的算法去扫描堆,对发现未使用的对象进行回收。 (1)初始标记 (2)并发标记 (3)并发预处理 (4)重新标记 (5)并发清除 (6)并发重置 特点:响应时间优先,减少垃圾收集停顿时间 适应场景:服务器、电信领域等。 通过JVM参数 -XX:+UseConcMarkSweepGC设置
  • G1收集器 在G1中,堆被划分成 许多个连续的区域(region)。采用G1算法进行回收,吸收了CMS收集器特点。 特点:支持很大的堆,高吞吐量 --支持多CPU和垃圾回收线程 --在主线程暂停的情况下,使用并行收集 --在主线程运行的情况下,使用并发收集 实时目标:可配置在N毫秒内最多只占用M毫秒的时间进行垃圾回收 通过JVM参数 –XX:+UseG1GC 使用G1垃圾回收器

GC的选择

官方推荐,需要根据应用的实际情况进行选择。在选择之前必须要对应用的堆大小、收集频率进行估算。

使用SerialGC的场景:
1、如果应用的堆大小在100MB以内。
2、如果应用在一个单核单线程的服务器上面,并且对应用暂停的时间无需求。
使用ParallelGC的场景:
如果需要应用在高峰期有较好的性能,但是对应用停顿时间无高要求(比如:停顿1s甚至更长)。
使用G1、CMS场景:
1、对应用的延迟有很高的要求。
2、如果内存大于6G请使用G1。

2. JAVA类加载器?包括?几种?它们之间的?父?子关系是怎么样的?双亲委派机
制是什什么意思?有什什么好处?
3. 如何?自定义?一个类加载器??你使?用过哪些或者你在什什么场景下需要?一个?自
定义的类加载器?吗?
4. 堆内存设置的参数是什什么?
5. Perm Space中保存什什么数据? 会引起OutOfMemory吗?
6. 做gc时,?一个对象在内存各个Space中被移动的顺序是什什么?
7. 你有没有遇到过OutOfMemory问题?你是怎么来处理理这个问题的?处理理
过程中有哪些收获?
8. 1.8之后Perm Space有哪些变动? MetaSpace?大?小默认是?无限的么? 还是
你们会通过什什么?方式来指定?大?小?
9. Jstack是?干什什么的? Jstat呢? 如果线上程序周期性地出现卡顿,你怀疑可
能是gc导致的,你会怎么来排查这个问题?线程?日志?一般你会看其中的什什么
部分?
10. StackOverFlow异常有没有遇到过??一般你猜测会在什什么情况下被触
发?如何指定?一个线程的堆栈?大?小??一般你们写多少?
Linux命令
1. ?日志特别?大只想看最后100?行行怎么弄弄? 如果想?一直看?日志的持续输出,?用
什什么命令?
2. 如果?日志?一边输出,?一边想实时看到有没有某个关键字应该怎么弄弄?
3. grep如果忽略略?大?小写应该怎么弄弄? 正则表达式呢?
4. vim往下?一?行行是什什么键?往下30?行行呢? 跳到?文件末尾?一?行行是什什么? 跳回来
是什什么? 向后搜索是什什么?
5. 如果有个?文本?文件,按空格作为列列的分隔符,如果想统计第三列列?里里?面的每
个单词的出现次数应该怎么弄弄?
6. 如果把上?面的出现次数排个序应该怎么弄弄? 想按照数字本身的顺序?而不不是
字符串串的顺序排列列怎么弄弄?
7. Linux环境变量量是以什什么作为分隔符的?环境变量量通过什什么命令设置?
8. 给某个?文件权设置限?比如设置为644 是?用什什么命令?这个6是什什么意思?
9. Linux下?面如果想看某个进程的资源占?用情况是怎么看的?系统load?大概
指的什什么意思?你们线上系统load?一般多少?如果?一个4核机器?,你认为多
少load是?比较正常的?top命令?里里?面按?一下1会发?生什什么?
10. top命令?里里?面,有时候所有进程的CPU使?用率加起来超过100%是怎么回
事?
11. 还有哪些查看系统性能或者供你发现问题的命令?你?一般是看哪个参
数?
12. 想看某个进程打开了了哪些?网络连接是什什么命令??里里?面连接的状态你?比较
关?心哪?几种?
-- 偏题
1. 有没有做过Linux系统参数?方?面的优化,?大概优化过什什么?
2. 系统参数?里里?面有个叫做backlog的可以?用来?干什什么?
3. 查看?网络连接发现好多TIME_WAIT 可能是什什么原因?对你的应?用会有什什
么影响?你会选择什什么样的?方式来减少这些TIME_WAIT
4. 可否介绍?一下TCP三次握?手的过程,如果现在有个?网络程序,你?用第三?方
的library来发送数据,你怀疑这个library发送的数据有问题,那么怎么来验
证?tcpdump导出的?文件你?一般是怎么分析的?
5. KeepAlive是?用来?干什什么的?这样的好处是什什么?
Redis
-- 开发
1. 缓存穿透可以介绍?一下么?你认为应该如何解决这个问题
2. 你是怎么触发缓存更更新的?(?比如设置超时时间(被动?方式), ?比如更更新的时
候主动update)?如果是被动的?方式如何控制多个?入?口同时触发某个缓存更更
新?
3. 你们?用Redis来做什什么?为什什么不不?用其他的KV存储例例如Memcached,
Cassandra等?
4. 你们?用什什么Redis客户端? Redis?高性能的原因?大概可以讲?一些?
5. 你熟悉哪些Redis的数据结构? zset是?干什什么的? 和set有什什么区别?

redis五种数据类型:String,Hash,List,Set,ZSet

zset 相比set多了一个排序

6. Redis的hash, 存储和获取的具体命令叫什什么名字?
7. LPOP和BLPOP的区别?
8. Redis的有?一些包含SCAN关键字的命令是?干嘛的? SCAN返回的数据量量是
固定的吗?
9. Redis中的Lua有没有使?用过? 可以?用来做什什么? 为什什么可以这么?用?
10. Redis的Pipeline是?用来?干什什么的?
-- 运维
11. Redis持久化?大概有?几种?方式? aof和rdb的区别是什什么? AOF有什什么优缺
点吗?
12. Redis Replication的?大致流程是什什么? bgsave这个命令的执?行行过程?
-- 偏题
13. 如果有很多 KV数据要存储到Redis, 但是内存不不?足, 通过什什么?方式可以缩
减内存? 为什什么这样可以缩?小内存?
14. Redis中List, HashTable都?用到了了ZipList, 为什什么会选择它?
监控、稳定性
1. 业务?日志是通过什什么?方式来收集的?
2. 线上机器?如何监控?采?用什什么开源产品或者?自研的产品?它是分钟级的还
是秒级的?
3. 如果让你来想办法收集?一个JAVA后端应?用的性能数据,你会在意哪些?方
?面? 你会选择什什么样的?工具、思路路来收集?
4. ?一般你调?用第三?方的时候会不不会监控调?用情况?

原文地址:https://www.cnblogs.com/xsg0011/p/9158033.html

时间: 2024-10-16 13:59:19

面试题整理的相关文章

小鹿·试题整理

1)在RHEL5系统中,以下命令(C)可用来查看系统的路由表信息 A) ip add list B) show ip route C) route -n D) route --print 补充:查看网络接口信息 ifconfig 查看网络连接情况 netstat 跟踪数据包       traceroute 目标主机地址 域名解析         nslookup 目标主机地址 2)在Linux系统日志消息中,重要性最低的是(C)级别,表示正常的程序或系统调试信息. A)EMERG B) WAR

Touch事件or手机卫士面试题整理回答(二)

Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEvent(),返回值控制Touch是否向下传递. true中断事件,false不中断事件. onTouchEvent() 返回值决定否处理事件.True消耗事件,False不处理事件向上传递. 2. 轮播动画的实现原理 ViewPage和TextView组合实现图片和标题的效果 ViewPage设置setOnPa

海量数据面试题整理1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是

海量数据面试题整理 1. 给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G.所以不可能将其完全加载到内存中处理.考虑采取分而治之的方法. s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中.这样每个小文件的大约为300M. s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为).这样

Java笔试面试题整理第一波

(本系列同步更新于 个人博客小站) 本系列整理Java相关的笔试面试知识点.其它几篇文章例如以下: Java笔试面试题整理第八波 Java笔试面试题整理第七波 Java笔试面试题整理第六波 Java笔试面试题整理第五波 Java笔试面试题整理第四波 Java笔试面试题整理第三波 Java笔试面试题整理第二波 Java笔试面试题整理第一波 1.Java变量 Java中主要有例如以下几种类型的变量 局部变量 类变量(静态变量)-- 属于类 成员变量(非静态变量)-- 属于对象 2.关于枚举 pack

web前端面试题整理(HTML篇)

web前端面试题整理(HTML篇)需要web前端课程工具和电子书,可以加: 33群105601600;  22群1203428331. h5的改进:新元素画布canvas: HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成音频audio视频video语义性: article,  nav ,  footer, section, aside, hgroup等.时间time 新属性拖放: draggable   <img draggable=&q

Java笔试面试题整理第四波

1.HashMap.HashTable.ConcurrentHashMap的区别 [参考:http://www.cnblogs.com/carbs/archive/2012/07/04/2576995.html] (关于HashMap的分析,在第三篇总结<Java笔试面试题整理第三波>中的hashCode有分析,同样在这篇中有关于Java容器的介绍.HashMap和HashTable都属于Map类集合.) HashMap和HashTable都实现了Map接口,里面存放的元素不保证有序,并且不存

嵌入式c笔试题(整理)

嵌入式c笔试题 (2012-03-24 22:36) 预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的

Java笔试面试题整理第八波

本系列整理Java相关的笔试面试知识点,其他几篇文章如下: Java笔试面试题整理第七波 Java笔试面试题整理第六波 Java笔试面试题整理第五波 Java笔试面试题整理第四波 Java笔试面试题整理第三波 Java笔试面试题整理第二波 Java笔试面试题整理第一波 1.运算符相关 What results from the following code fragment? inti = 5; intj = 10; System.out.println(i + ~j); A.Compilati

Python面试题整理-更新中

几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路人甲的回答 如何学习Python爬虫[入门篇] - 学习编程 - 知乎专栏 Python常用库整理 - 学习编程 - 知乎专栏 学好Python的11个优秀资源 - 学习编程 - 知乎专栏 在开头依然推荐一个Python面试题整理比较好的网站:GitHub : 关于Python的面试题.同样推荐几道

iO经典笔试题整理

iOS经典笔试题整理---2014年8月 1.回答person的retainCount值,并解释为什么 Person * per = [[Person alloc] init]; 此时person 的retainCount的值是1self.person = per; 在self.person 时,如果是assign,person的 retainCount的值不变,仍为1若是:retain person的retainCount的值加1,变为2 若是:copy person的retainCount值