线程池大小如何设置
线程池大小的设置需要根据具体的应用场景和系统资源进行考量。
**CPU密集型任务:**这种任务消耗的主要是CPU资源,可以将线程设置为N(即CPU核心数)+1,比CPU核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其他原因导致的任务暂停而带来的影响。一旦任务暂停。CPU就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用CPU的空闲时间。
**I/O密集型任务:**这种任务应用起来,系统会用大部分时间来处理I/O交互,而线程在处理I/O交的时间段内不会占用CPU处理,这时就可以交出给其他线程使用,因此在I/O密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是2N。
如何判断是CPU密集型任务还是I/O密集性任务:
CPU密集型任务简单理解就是利用CPU计算能力的任务比如在内存中对大量任务的数据进行排序。但凡涉及到网络读取,文件读取这类都是I/O密集型任务。这类任务的特点是CPU计算耗费的时间相比IO操作完成的时间来说很少。大部分时间都花在等待IO交互操作完成上。
java
未读当我们在使用mvc框架时,tomcat控制台输出经常出现乱码问题:
添加配置成英文输出:-Duser.language=en
java
未读步骤:
1.https://oss.console.aliyun.com/overview
开通 对象存储OSS
2.查看文档:
常用入口=》API文档=》在帮助中心打开【https://help.aliyun.com/document_detail/31947.html?spm=5176.8465980.help.dexternal.4e701450Bu0s0M】
1)专业术语【https://help.aliyun.com/document_detail/31947.html】
Bucket:一个项目创建一个Bucket,存储空间
Object:对象是 OSS 存储数据的基本单元
Region:地域表示 OSS 的数据中心所在物理位置
Endpoint:访问OSS文件域名URL
AccessKey:访问密钥
读写权限:私有/公共度/公共读写
服务端加密:无
实施日志:不开通
3.上传方式【建议采用方式三】
方式一:
文件先上传到应用服务器,然后再上传到OSS
此方式会文件上传会经过后台服务器,占用大量带宽,导致用户访问其他业务卡顿。
方式二:
文件直接由前端通过js代码上传到oss ...
一.简单的冒泡排序
12345678910111213141516171819202122232425262728293031/** * @Author wzy * @Date 2024/3/17 12:27 * @description: 冒泡排序 */public class BubbleSort { public static void main(String[] args) { int[] array = {5, 9, 7, 4, 1, 3, 2, 8}; // 调用冒泡排序方法 bubbleSort(array); } private static void bubbleSort(int[] array) { for (int j = 0; j < array.length - 1; j++) { for (int i = 0; i < array.length - 1; i++) { ...
Spring
未读1.Spring简介
Spring是一个分层的javaEE轻量级开源框架,Spring的核心是IOC和AOP。
Spring主要优点:
方便解耦,简化开发,通过Spring提供的Ioc容器。我们可以将对象之间的依赖关系由Spring进行控制,避免硬编码造成的程序耦合度过高
AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程
声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式事务灵活的进行事务管理,提高开发的效率和质量
方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作
方便集成各种优秀的框架。Spring提供了对各种优秀框架的直接支持
2.Spring的五个模块
2.1 核心模块(Core Container)
Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述。由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。
Context模块构建于核心模块之上,扩展了BeanFactory ...
1.Mysql中有哪些锁
在Mysql中,按照加锁的范围,可以分为全局锁,表级锁,行级锁三类
1.1 全局锁
要使用全局锁,则要执行这条命令:
1flush tables with read lock
执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞:
对数据的增删改操作,比如 insert、delete、update等语句;
对表结构的更改操作,比如 alter table、drop table 等语句。
如果要释放全局锁,则要执行这条命令:
1unlock tables
当然,当会话断开了,全局锁会被自动释放。
全局锁应用场景是什么?
全局锁主要应用于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结构的更新,而出现备份文件的数据与预期的不一样。
举个例子大家就知道了。
在全库逻辑备份期间,假设不加全局锁的场景,看看会出现什么意外的情况。
如果在全库逻辑备份期间,有用户购买了一件商品,一般购买商品的业务逻辑是会涉及到多张数据库表的更新,比如在用户表更新该用户的余额,然后在商品表更新被购买的商品的库存。
那么,有可能出现这样的顺序:
先备份了用 ...
having子句与where都是设定条件筛选的语句。
区别:
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数
在查询过程中执行顺序:from>where>group(包含聚合)>having>order>select
所以聚合函数(sum,min,max,avg,count)要比having子句优先执行,而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)
12where子句:select sum(num) as rmb from order where id>10//只有先查询出 id大于10的记录才能进行聚合语句
12345having子句:select age, count(*) from employees group by age having count(*) > 4//上例having条件表达式为聚合语句,肯定的说having子句查询过程执行优先级别低于聚合语句。//再换句话说把上面 ...
1.什么是事务
数据库中的的事务是指对数据库执行一批操作,在同一个事务中,这些操作要么全部执行成功,要么全部失败,不存在部分成功的情况。
事务是一个源自操作,是一个最小执行单元,可以由一个或者多个sql语句组成。
在同一个事务中,所有sql语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务就会执行失败。
2.事务的四大特性(ACID)
原子性(Atomicity)
事务的整个操作如原子操作一样,要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。
一致性(Consistency)
一个事务完成时,必须是所有的数据都保持一直状态
隔离性(Isolation)
数据库系统提供的隔离机制,保证事务不受外部并发操作影响的独立环境下运行
持久性(Durability)
事务一旦提交成功或回滚,它对数据库中的数据的改变是永久的
3.隔离级别
并发事务问题:脏读,不可重复读,幻读
脏读:一个事务读到另外一个事务还没有提交的数据
如下图:事务A修改了数据库中的一条记录,还未提交,事务B已经读到了修改之后的数据。
...
1.什么是索引
索引(index)是帮助Mysql高效获取数据的数据结构(有序),在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2.索引的底层数据结构
Mysql默认的底层数据结构是B+树,首先我们先看看二叉树和B树:
二叉搜索树:二叉搜索树可能会退化为链表,时间复杂度从ologn退化到o(n);
如果采用平衡的二叉树,如红黑树:这种情况下如果数据库表的数据量过大,可能会造成树的深度过深,查找效率也不会很高;
B树:B树是一种多叉路平衡查找树,B树每个节点可以有多个分支,即多叉;以一颗最大度数(max-degree)为5(5阶)的B-tree为例,那么B树 的每个节点最多存储4个key:
相较于二叉树,B-tree是一颗矮胖的树,查找效率高。
B+tree:
B+tree是在B-tree基础上的一种优化,使其跟适合实现外存储索引结构,InnoDB存储引擎就是使用B+tree实现索引结构。
B树和B+树对比:1、磁盘读写代价B+树更低;2、查找效率B+树 ...
1.如何定位慢查询
慢查询出现情况:
聚合查询
多表查询
表数据量过大查询
深度分页查询
1.开源工具
调试工具:Arthas
运维工具:Prometheus、Skywalking
2.自带慢日志
利用mysql自带慢日志:
慢日志查询记录了所有执行超过指定参数的所有sql语句的日志。如果要开启慢查询日志,需要在mysql的配置文件(/etc/my.conf)中配置如下信息:
配置完毕后,通过以下指令重新 启动mysql服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log
2.如何优化慢查询
1.可以才用EXPLAIN或者DESC命令获取Mysql如何执行select语句的信息
possible_key 当前SQL可能会使用到的索引
key 当前SQL实际命中的索引
key_len 索引占用的大小
Extra 额外的优化建议
type 这条sql的连接类型,性能由好到差为null、system、const、eq_ref、ref、range、index、all
system:查询系统中的表
const:根据主键查询 ...