leetcode java 大厂基础面试题附答案(一)

目录

1. SpingBoot 也有定时任务?是什么注解?(百度)

2. 什么情况线程会进入 WAITING 状态?(百度)

3. 简述多进程开发中 join 和 daemon 的区别?

4. 异步和同步、阻塞和非阻塞之间的区别?(百度)

5. 为什么要分内核态和用户态?(百度)

6. Java常用集合及特点?(华为)

7. 介绍 Spring MVC 的工作流程?(华为)

8. Redis 的特点是什么?(华为)

9. Redis 雪崩和击穿了解吗?(华为)

10. 什么是面向对象,谈谈你的理解?(华为)

11. 访问数据库除了 JDBC 还有什么?(华为)


1. SpingBoot 也有定时任务?是什么注解?(百度)


在 SpringBoot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。



2. 什么情况线程会进入 WAITING 状态?(百度)


一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态。进入这个 状态后不能自动唤醒,必须等待另一个线程调用notify方法或者notifyAll方法时才能够被唤醒。
• 调用Object对象的wait方法,但没有指定超时值。
• 调用Thread对象的join方法,但没有指定超时值。
• 调用LockSupport对象的park方法。



3. 简述多进程开发中 join 和 daemon 的区别?


join:当子线程调用join时,主线程会被阻塞,当子线程结束后,主线程才能继续执行。 daemon:当子进程被设置为守护进程时,主进程结束,不管子进程是否执行完毕,都会随着 主进程的结束而结束。



4. 异步和同步、阻塞和非阻塞之间的区别?(百度)


同步
当一个request发送出去以后,会得到一个response,这整个过程就是一个同步调用的过 程。哪怕response为空,或者response的返回特别快,但是针对这一次请求而言就是一 个同步的调用。
异步
当一个request发送出去以后,没有得到想要的response,而是通过后面的callbacks状 态或者通知的方式获得结果。可以这么理解,对于异步请求分两步:
• 调用方发送request没有返回对应的response (可能是一个空的response);
• 服务提供方将response处理完成以后通过callback的方式通知调用方。
对于1 )而言是同步操作(调用方请求服务方),对于2)而言也是同步操作(服务方回掉 调用方)。从请求的目的(调用方发送一个request,希望获得对应的response)来看,这 两个步骤拆分开来没有任何意义,需要结合起来看,而这整个过程就是一次异步请求。异步请 求有一个最典型的特点:需要callback、状态或者通知的方式来告知调用方结果。
阻塞 阻塞调用是指调用方发出request的线程因为某种原因(如:等待系统资源)被服务方挂起, 当服务方得到response后就唤醒挂起线程,并将response返回给调用方。
非阻塞
非阻塞调用是指调用方发出request的线程在没有等到结果时不会被挂起,并且直到得到 response 后才返回。 阻塞和非阻塞最大的区别就是看调用方线程是否会被挂起。



5. 为什么要分内核态和用户态?(百度)


假设没有这种内核态和用户态之分,程序随随便便就能访问硬件资源,比如说分配内存,程序 能随意的读写所有的内存空间,如果程序员一不小心将不适当的内容写到了不该写的地方,就 很可能导致系统崩溃。用户程序是不可信的,不管程序员是有意的还是无意的,都很容易将系 统干到崩溃。
正因为如此,Intel就发明了 ring0-ring3这些访问控制级别来保护硬件资源,ring。的就是 我们所说的内核级别,要想使用硬件资源就必须获取相应的权限(设置PSW寄存器,这个操 作只能由操作系统设置)。操作系统对内核级别的指令进行封装,统一管理硬件资源,然后向 用户程序提供系统服务,用户程序进行系统调用后,操作系统执行一系列的检查验证,确保这 次调用是安全的,再进行相应的资源访问操作。**内核态能有效保护硬件资源的安全。



6. Java常用集合及特点?(华为)


List: ArrayList、LinkedList、Vector、Stack Set: LinkedSet、HashSet、TreeSet Queue->Deque->LinkedListoMap: HashMap、LinkedHashMap、TreeMap Dictionary->HashTable->Properties。Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,默认长度为10,超 过会100%延长,变成20,浪费空间。ArrayList :基于数组,便于按index访问,超过数组需要扩容,扩容成本较高。LinkedList:使用链表实现,无需扩容。HashSet:底层数据结构是哈希表(无序,唯一),通过hashcode()和equals()保证元素 唯一。LinkedHashSet:底层数据结构是链表和哈希表(FIFO插入有序,唯一),由链表保证元 素有序,由哈希表保证元素唯一。TreeSet:底层数据结构是红黑树(唯一,有序),通过自然排序和比较器排序保证元素有序, 根据比较返回值是否是0来保证元素唯一性。TreeMap是有序的。HashMap :空间换时间,哈希冲突不大的情况下查找数据性能很高。LinkedHashMap基本特点:继承自HashMap,对Entry集合添加了一个双向链表。



7. 介绍 Spring MVC 的工作流程?(华为)


• 用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet。DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知, 该请求该由哪个Controller来处理(并未调用Controller,只是得知)DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去 执行哪个ControllerHandlerAdapter处理器适配器去执行Controller并得到ModelAndView(数据和视图), 并层层返回给DispatcherServletDispatcherServlet 将 ModelAndView 交给 ViewReslover 视图解析器解析,然后返 回真正的视图。DispatcherServlet将模型数据填充到视图中DispatcherServlet将结果响应给用户



8. Redis 的特点是什么?(华为)


Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库统统 加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知 性能最快的Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个 value的最大限制是1GB,不像Memcached只能保存1MB的数据,因此Redis可以 用来实现很多有用的功能。比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的 Set可以做高性能的tag系统等等。

另外Redis也可以对存入的Key-Value设置expire 时间,因此也可以被当作一个功能加强版的Memcached来用。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因 此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。



9. Redis 雪崩和击穿了解吗?(华为)


缓存击穿问题:某个KEY失效的时候,正好有大量并发请求访问这个KEY。分析:跟穿透其实很像,属于比较偶然的。

解决办法:

KEY的更新操作添加全局互斥锁。

完全以缓存为准,使用延迟异步加载的策 略(异步线程负责维护缓存的数据,定期或根据条件触发更新),这样就不会触发更新。

缓存雪崩
• 问题:当某一时刻发生大规模的缓存失效的情况,导致大量的请求无法获取数据,从而将 流量压力传导到数据库上,导致数据库压力过大甚至宕机。

原因:一般而言,缓存雪崩有2种可能性:大量的数据同一个时间失效:比如业务关系 强相关的数据要求同时失效Redis宕机分析:一般来说,由于更新策略、或者数据热点、缓存服务宕机等原因,可能会导致缓存 数据同一个时间点大规模不可用,或者都更新。所以,需要我们的更新策略要在时间上合 适,数据要均匀分享,缓存服务器要多台高可用。


• 解决办法:更新策略在时间上做到比较平均。如果数据需要同一时间失效,可以给这批数 据加上一些随机值,使得这批数据不要在同一个时间过期,降低数据库的压力。使用的热 数据尽量分散到不同的机器上。多台机器做主从复制或者多副本,实现高可用。做好主从 的部署,当主节点挂掉后,能快速的使用从结点顶上。实现熔断限流机制,对系统进行负 载能力控制。对于非核心功能的业务,拒绝其请求,只允许核心功能业务访问数据库获取 数据。服务降价:提供默认返回值,或简单的提示信息。



10. 什么是面向对象,谈谈你的理解?(华为)


世间万物都可以看成一个对象。每个物体包括动态的行为和静态的属性,这些就构成了一个对象。



11. 访问数据库除了 JDBC 还有什么?(华为)


自己封装JDBC的工具类Commons-Dbutils+dbcp【QueryRunner】SpringJDBC [JdbcTemplate]JPA【配置文件、domain实体类+注解、EntityManager]SpringDataJpaHibernate 框架Mybatis


参考:
链接:https://leetcode.cn/leetbook/read/da-han-hou-duan-gang-ti-mu-he-ji-shang/niouzv/


 

猜你喜欢

转载自blog.csdn.net/lejian/article/details/129372496