| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 2021-10-21面试题 -> 正文阅读 |
|
[Java知识库]2021-10-21面试题 |
? ? ? ? ? GC垃圾回收机制在java中,堆被划分为两个不同的区域:新生代、老年代,新生代有三个分区:Eden、ToSurvivor、FromSurvivor,新生代使用复制算法完成回收,老年代使用标记算法。在易电源区执行第一次GC,存活的对象被分配到From区,然后再采用复制算法将Eden和From区一起清理,存活的被复制到to区,移动一次年龄加一,当年龄大于一定值的时候直接移动到老年区,年龄默认值是15。当老年代存满后,使用Full GC清理整个堆包括年轻代和老年代。 ? ? ? ? ?数据库索引的作用为了提高数据库的查询效率,给查询需要量大,字段值比较大的情况加索引,因为创建索引所占的空间比较大,所以不是所有条件都适合加索引。例如:如果每次都需要取到所有表记录,进行全表扫描;非唯一字段,例如“性别”这种大量重复的字段。 ? ? ? ?spring:IOC和DIIOC:将对象的创建,对象的存储(map),对象的管理(依赖查找、依赖注入)交给了spring容器。 DI:组件之间的依赖关系由容器在应用系统运行期来决定,也就是容器动态的将某种依赖关系的目标对象实例注入到应用系统中的各个关联组件之间. AOP:把系统分为核心关注点和横切关注点。核心主要处理业务逻辑,横切是权限验证,日志,事务处理。 AOP面向切面编程:切面:piontcut与point的组合 ??? ??? ??? ??? ? 连接点:程序执行过程中明确的点。 ??? ??? ??? ? ? ? 通知:前置通知、后置通知、环绕通知、返回后通知、异常通知 ??? ??? ??? ??? ? 切点:提供一组规则来匹配Joinpoint ??? ??? ??? ??? ? 目标对象:包含连接点的对象。也被称作被通知或被代理的对象。 ??? ??? ??? ??? ? AOP代理:AOP框架创建的对象,包含通知。在spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 ??? ??? ??? ??? ? 织入:组装方面来创建一个通知对象。这可以在编译时完成也可以在运行时完成。spring在运行时完成。 ? ? ? ? ? ? springMVC##### 什么是springmvc SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架。通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,是为了简化开发,减少出错。 ##### springmvc的处理流程 1.浏览器发送请求,被前端控制器dispatcherservlet捕获。 2.dispacherservlet通过请求的url解析到请求资源标识uri,然后根据该uri调用handlermapping,获取对应的handler。 3.得到handler后,开始有handleradpter适配器进行操作。 4.handleradpter根据handler来调用controller控制器,开始处理请求,处理具体业务。 5.处理器处理完业务后会返回一个ModelAndView对象,Model是数据对象,View是个逻辑上的view。 6.ViewResolver视图解析器通过逻辑view查找实际的view。 7.dispacherservlet把model交给view进行视图渲染。 8.最后再把view返回给浏览器 ? ? ? ? ? ? ?Mybatis##### 什么是mybatis? MyBatis 是一款优秀的**持久层框架**,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 ##### Mybatis工作流程 1.mybatis应用程序通过sqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出sqlSessionFactory。 2.sqlSessionFactory的实例直接开启一个sqlSession 3.再通过SqlSession实例获得Mapper对象 4.执行Mapper映射的SQL语句,完成对数据库的CRUD操作和事务提交 5.关闭sqlSession ? ?sqlSession是单线程对象,因为他是非线程安全的,是持久化操作的独享对象。 ##### resultType和resultMap的区别 resultType是直接表示返回类型的,resultMap是对外部resultMap的引用,resultType和resultMap不能同时存在。 (1)返回类型属性是resultType时,Mybatis会将Map里面的键值对取出赋给resultType所指定对象对应的属性。 (2)返回类型是resultMap时,需要把它转化成对应的对象,通常在复杂查询中很有作用。 ? ? ? ? ? ? ? SpringCloud##### nacos 概念:是一个应用于服务注册与发现、配置管理的平台 ###### nacos服务注册及健康检查状态 nacos服务客户端启动时会每隔一段时间(默认5秒)向nacos发送心跳包,nacos注册中心15秒内没有检测到心跳包会默认认为nacos处于一种不健康状态,30秒还收不到心跳包则认为这个服务不可用。 ? ? ? ? ? ?feignfeign远程调用,核心就是通过一些列的封装和处理,将以Java注解的方式定义的远程调用API接口,最终转化成HTTP的请求形式,将HTTP的请求的响应结果,解码成JAVA Bean,返回给调用者。 ###### 为什么要使用feign 基于Feign可以更加友好的实现服务调用,简化服务消费方对服务提供方法的调用。 ###### 项目中如何实现服务的调用 一种是RestTemplate,一种是OpenFeign,这两种服务在进行服务调用时,都可以借助Ribbon实现负载均衡。 ? ? ? ? ? ? ?sentinel###### 为什么要限流,Sentinel限流常用算法 限流的目的是为了保证服务更加可靠的运行,不至于系统在遇到突发流量是,出现系统宕机的现象。常用的限流算法有:计数器发,滑动窗口法、漏斗算法、漏桶算法。 ###### 网关层面如何实现负载均衡以及常用算法? 网关层面的负载均衡我们借助了Ribbon进行实现,常用算法有轮询,权重,随机,hash等,这个算法都可以在配置中心进行配置,然后基于业务不同,做动态调整。 #### ?? ??? ??? ??? ??? ?Nginx##### 什么是Nginx Nginx是一个web服务器和反向代理服务器,主要功能是:1.反向代理服务器 2.实现负载均衡 3.虚拟主机 ##### Nginx常见命令 启动 ? 在nginx的安装包路径下cmd:start nginx 停止 ? ?nginx -s stop 查看版本 ?nginx -v ##### 反向代理机制与正向代理机制 反向代理服务器位于用户与目标服务器之间,用户不知道真实的服务器地址,保护了服务器端的地址。 正向代理位于客户端与原始服务器端,用户了解访问的服务器到底是谁,保护了用户的信息。 ? ? ? ? ? ? ? ? Linux常见命令? ? ? ? ? ? ?数据库及常用的sql优化##### 什么是数据库的事务 事务就是为了保证原有事务的完整性和一致性,逻辑上的一组操作,要么都执行,要么都不执行。 原子性:一个事物是不可分割的整体,要么成功要不失败 一致性:事务必须是数据库从一个一致性状态到另一种一致性状态。 隔离性:一个事物的执行不能被其他事务所干扰。 持久性:一个事物一旦提交后对数据库的改变是永久的 ##### 数据库的字段约束 主键约束:实现实体的完整性,值唯一,不能为空,且可以自动递增 外键约束:用于多表之间的查询该表组件作为另外张表的外键建立标语标志的关系 非空约束:保证该字段的值不能为空 唯一约束:列表的唯一性约束 检查约束:检查列的值是否满足一个boolean表达式 默认约束:给指定的字段可以设置默认值,不设置值事使用默认值而不是null ##### 数据库的优化方案 (1)查询时能不用*就不用,尽量写全字段名。 (2)索引不是越多越好,每个表控制在6个索引以内,,范围where条件的情况下索引不起作用 (3)大部分情况连接效率远大于子查询。 (4)多用explain和profile分析查询语句,判断是什么原因使SQL慢 (5)有时候1条大的SQL可以分成几个小的SQL顺序执行,速度快。 (6)每隔一段时间用alter table 表名 engine=innodb优化表 (7)连接时注意:小表jion大表的原则 (8)查看慢查询日志,找出执行时间长的SQL进行优化 (9)尽量免使用OrderBy (10)因为where自居后面的条件执行顺序是从右到左,所以尽量把能过滤掉大部分数据的条件写在后面 ##### 什么是SQL攻击?如何解决 **SQL注入:**就是通过把SQL命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务期执行恶意的SQL命令。 **解决方法**:1.对用户的输入进行校验,通过正则表达式或限制长度,对单引号和双“-”进行转换 ??? ??? ??? ??? ??? ?2.不适用动态拼接SQL,直接使用存储过程进行存储 ??? ??? ??? ??? ??? ?3.不使用管理员权限的数据库连接 ??? ?·?? ??? ??? ??? ?4.对重要信息进行加密或hash掉密码和敏感的信息 ??? ??? ??? ??? ??? ? 5.对异常信息进行自定义包装,把异常信息存放在独立的表中 ? ? ? ? ? ? ? ? ? ?Redis<u>哨兵机制(Sentinel)</u>:为了解决主从复制架构中出现的宕机的情况。管理多个Redis服务器,提供了监控、提醒以及自动故障的转移功能。为Redis提供高可用性解决方案。 <u>集群(cluster):</u>单台服务器资源有限,cpu和IO资源可以通过主从复制,进行读写分离,把一部分CPU和IO压力转移到从服务器上。每台服务器只负责一部分任务,讲这些服务器构成一个整体就是集群。 概念 Redis是一个key-value存储系统,是一个分布式缓存数据库,非关系型数据库支持数据的持久化。 **数据类型:** String:普通的key-value存储 Hash:是一个键值(key,value)对集合 set:无序的去重集合。 list:有序可重复的集合 zset:带权值的无序集合。zset元素还另有一个数字代表权值,集合通过权值进行排序。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:31:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |