开源框架系列
Mybatis
有关于Mybatis的整个面试专题一共有将近40个不同的知识点,在问题之间相互延伸,层层递进。从最基础的Mybatis是什么、Mybatis的优点有哪些,到Mybatis里面的动态Sql的设定等等,从而全面了解Mybatis的运用原理。
例题:
Q:MyBatis实现一对一有几种方式?具体怎么操作的?
A:有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置association节点配置一对一的类就可以完成;嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置。
Q:接口绑定有几种实现方式,分别是怎么实现的?
A:有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置association节点配置一对一的类就可以完成;嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置。
SpringMVC
做为Spring的一个模块,基于MVC的一个框架,相信大家对其定义都足够了解。但是,其优点、工作原理、流程你能否说出一二呢?
例题:
Q:讲下SpringMvc的执行流程
A:系统启动的时候根据配置文件创建spring的容器, 首先是发送http请求到核心控制器disPatherServlet,spring容器通过映射器去寻找业务控制器,使用适配器找到相应的业务类,在进业务类时进行数据封装,在封装前可能会涉及到类型转换,执行完业务类后使用ModelAndView进行视图转发,数据放在model中,用map传递数据进行页面显示。
Spring
一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台,它帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。
例题:
Q:在 Spring 中如何配置 Bean ?
A:Bean 的配置方式: 通过全类名(反射)、通过工厂方法(静态工厂方法 & 实 例工厂方法)、FactoryBean。
高性能缓存系列
Redis、Memcached
咱也不废话了,直接上题:
例题:
Q:Redis和Memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高?
A:区别:
- mc可缓存图片和视频。rd支持除k/v更多的数据结构;
- rd可以使用虚拟内存,rd可持久化和aof灾难恢复,rd通过主从支持数据备份;
- rd可以做消息队列。
原因:mc多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。
Q:memcached能接受的key的最大长度是多少?
A:key的最大长度是250个字符。需要注意的是,250是memcached服务器端内部的限制,如果您使用的客户端支持”key的前缀”或类似特性,那么key(前缀+原始key)的最大长度是可以超过250个字符的。我们推荐使用使用较短的key,因为可以节省内存和带宽。
Q:缓存与数据库不一致怎么办
A:假设采用的主存分离,读写分离的数据库,如果一个线程A先删除缓存数据,然后将数据写入到主库当中,这个时候,主库和从库同步没有完成,线程B从缓存当中读取数据失败,从从库当中读取到旧数据,然后更新至缓存,这个时候,缓存当中的就是旧的数据。
发生上述不一致的原因在于,主从库数据不一致问题,加入了缓存之后,主从不一致的时间被拉长了。
处理思路:在从库有数据更新之后,将缓存当中的数据也同时进行更新,即当从库发生了数据更新之后,向缓存发出删除,淘汰这段时间写入的旧数据。
微服务系列
Dubbo
例题:
Q:Dubbo在安全机制方面是如何解决的?
A:Dubbo通过Token令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo还提供服务黑白名单,来控制服务所允许的调用方。
Spring Boot
例题:
Q:如何实现Spring Boot应用程序的安全性?
A:为了实现Spring Boot的安全性,我们使用 spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。
Spring Cloud
例题:
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
开源分享完整内容戳这里
Q:负载平衡的意义什么?*
A:在计算中,负载平衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。
复构架筑基系列
JVM
例题:
Q:GC收集器有哪些?CMS收集器与G1收集器的特点。
A:并行收集器:串行收集器使用一个单独的线程进行收集,GC时服务有停顿时间;
串行收集器:次要回收中使用多线程来执行;
CMS收集器是基于“标记—清除”算法实现的,经过多次标记才会被清除。
G1从整体来看是基于“标记—整理”算法实现的收集器,从局部(两个Region之间)上来看是基于“复制”算法实现的。
例题:
Q:MySQL的基础操作命令:
A:
MySQL 是否处于运行状态:Debian 上运行命令 service mysql status,在RedHat 上运行命令 service mysqld status;
开启或停止 MySQL 服务 :运行命令 service mysqld start 开启服务,运行命令 service mysqld stop 停止服务;
Shell 登入 MySQL: 运行命令 mysql -u root -p;
列出所有数据库:运行命令 show databases;
切换到某个数据库并在上面工作:运行命令 use databasename, 进入名为 databasename 的数据库;
列出某个数据库内所有表: show tables;
获取表内所有 Field 对象的名称和类型 :describe table_name。
Netty
例题:
Q:BIO、NIO和AIO的区别?
A:先分别说出BIO、NIO、AIO三者的定义。
BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的Stream是单向的,而NIO的channel是双向的。
(有加分延伸)
Tomcat
例题:
Q:Tomcat的缺省端口是多少,怎么修改?