java Mybatis 知识检验
1. MyBatis 中 #{}和** ${}**的区别是什么?#{}是预编译处理,${}是字符替换。 在使用 #{}时,MyBatis 会将 SQL 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 SQL 注入,保证程序的运行安全。 2. MyBatis 有几种分页方式?分页方式:逻辑分页和物理分页。 逻辑分页: 使用 MyBatis 自带的 RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。 物理分页: 自己手写 SQL 分页或使用分页插件 PageHelper,去数据库查询指定条数的分页数据的形式。 3. RowBounds 是一次性查询全部结果吗?为什么?RowBounds 表面是在“所有”数据中检索数据,其实并非是一次性查询出所有数据,因为 MyBatis 是对 jdbc 的封装,在 jdbc 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库查询多少条数据,假如你要查询更多数据,它会在你执行 next()的时候,去查询更多的数据。就好比你去自动取款机取 1000...
java Kafka 知识检验
1. kafka 可以脱离 zookeeper 单独使用吗?为什么?kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。 2. kafka 有几种数据保留的策略?kafka 有两种数据保存策略:按照过期时间保留和按照存储的消息大小保留。 3. kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G**,这个时候** kafka 将如何处理?这个时候 kafka 会执行数据清除工作,时间和大小不论那个满足条件,都会清空数据。 4. 什么情况会导致 kafka 运行变慢?· cpu 性能瓶颈 · 磁盘读写瓶颈 · 网络瓶颈 5. 使用 kafka 集群需要注意什么?· 集群的数量不是越多越好,最好不要超过 7 个,因为节点越多,消息复制需要的时间就越长,整个群组的吞吐量就越低。 · 集群数量最好是单数,因为超过一半故障集群就不能用了,设置为单数容错率更高。
java JVM 知识检验
1. 说一下 JVM 的主要组成部分?及其作用?· 类加载器(ClassLoader) · 运行时数据区(Runtime Data Area) · 执行引擎(Execution Engine) · 本地库接口(Native Interface) 组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。 2. 说一下 JVM 运行时数据区?不同虚拟机的运行时数据区可能略微有所不同,但都会遵从 Java 虚拟机规范, Java 虚拟机规范规定的区域分为以下 5 个部分: · 程序计数器(Program Counter Register):当前线程所执行的字节...
java Hibernate 知识检验
1. 为什么要使用 hibernate?· hibernate 是对 jdbc 的封装,大大简化了数据访问层的繁琐的重复性代码。 · hibernate 是一个优秀的 ORM 实现,很多程度上简化了 DAO 层的编码功能。 · 可以很方便的进行数据库的移植工作。 · 提供了缓存机制,是程序执行更改的高效。 2. 什么是 ORM 框架?ORM(Object Relation Mapping)对象关系映射,是把数据库中的关系数据映射成为程序中的对象。 使用 ORM 的优点:提高了开发效率降低了开发成本、开发更简单更对象化、可移植更强。 3. hibernate 中如何在控制台查看打印的 SQL 语句?在 Config 里面把 hibernate. show_SQL 设置为 true 就可以。但不建议开启,开启之后会降低程序的运行效率。 4. hibernate 有几种查询方式?三种:hql、原生 SQL、条件查询 Criteria。 5. hibernate 实体类可以被定义为 final 吗?实体类可以定义为 final 类,但这样的话就不能使用 hiber...
SpringCloud Alibaba 之 Sentinel(三)
五、Spring Cloud 集成Sentinel实践1、Sentinel接入Spring Cloud 创建一个基于Spring Boot的项目 添加Sentinel依赖包 12345<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.2.0.RELEASE</version></dependency> 创建一个REST接口,并通过@SentinelResource 配置限流保护资源 123456789101112131415@RestControllerpublic class HelloController { @SentinelResource(value = "hello",blockHandler = "blockH...
SpringCloud Alibaba 之 Sentinel(二)
**Sentinel是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流、流量整形、服务降级、系统负载保护等多个维度来帮助我们保障微服务的稳定性。**1、Sentinel的特性 丰富的应用场景 实时监控 开源生态支持 SPI扩展点支持 2、Sentinel的组成 核心库:不依赖任何框架/库,能够运行于所有JAVA运行时环境,同时对Dubbo、Spring Cloud 等框架也有较好的支持。 控制台:基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。 3、Sentinel Dashboard的部署 在GitHub中Sentinel的源码仓库中: 直接下载源码通过mvn clean package自己构建 直接在Release页面下载已经构建好的 Jar,地址:https://github.com/alibaba/Sentinel/releases。 命令启动控制台 4、Sentinel的基本应用4.1、实现限流的简单demo引入Sentinel核心库 12345<dependency> <gro...
SpringCloud Alibaba 之 Sentinel(一)
一、基于Sentinel的微服务限流及熔断系统常见的保护策略有:服务降级、限流 和 熔断。 1、限流的算法1.1 计数器算法 在指定周期内累加访问次数,当访问次数到达设定的阈值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零。 缺点:存在临界问题,当两个时间段内相近时间分别出现大量请求,整体来看短时间内请求量超过了设置的阈值。 1.2 滑动窗口算法 原理:在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的计数即可。 优点:解决了计数器算法所带来的临界问题。 使用场景:TCP网络通信协议中、Sentinel中 1.3 令牌桶限流算法 介绍:令牌桶是网络流量整形和速率限制中最常用的一种算法。 原理:系统会以一个恒定速度往固定容量的令牌桶中放入令牌。对于每一个请求,都需要从令牌桶中获取一个令牌,如果没有令牌,则触发限流策略。 优点:能够处理突发流量 1.4 漏桶限流算法 作用:控...
Mysql 递归查询解决方案
关于Mysql递归查询,归纳有以下几种方式:1、递归CTE如果是Mysql 8.0 以上的版本,支持递归CTE(公用表表达式),它是一个命名的临时结果集,仅在单个SQL语句(例如SELECT,INSERT,UPDATE或DELETE)的执行范围内存在。与派生表类似,CTE不作为对象存储,仅在查询执行期间持续。 与派生表不同,CTE可以是自引用(递归CTE),也可以在同一查询中多次引用。 此外,与派生表相比,CTE提供了更好的可读性和性能。大多数的数据库都支持CTE。 语法: 123456789101112WITH cte_name (column_list) AS ( query) SELECT * FROM cte_name;1.cte_name :CTE表达式的名称。2.column_list:列名列表。3.query:定义CTE结果集的Select查询语句注:查询中的列数必须与column_list中的列数相同。 如果省略column_list,CTE将使用定义CTE的查询的列列表,上面的语法只能在 MySQL8.0 以上版本才支持。 2、自定义函数而在Mysq...
Lambda表达式常见应用场景
一、集合中的使用 集合的遍历12345678910111213// 初始化集合List<User> users = new ArrayList<>();users.add(new User("詹姆士",22,"男"));users.add(new User("露西",21,"女"));users.add(new User("弗兰克",25,"男"));users.add(new User("爱丽丝",27,"女"));users.add(new User("路易斯",22,"男"));// 遍历集合 Lambdausers.stream().forEach(user -> System.out.println(user));// 遍历集合 方法引用users.stream().forEach(System.out::println); 方法引用(::双...
Java虚拟机
参考连接 JVM总结
