08 2022 档案
摘要:网络通信中,最底层的就是内核中的网络I/O模型了。随着技术的发展,操作系统内核的网络模型衍生出了五种I/O模型,《UNIX网络编程》一书将这五种I/O模型分为阻塞式I/O、非阻塞式I/O、I/O复用、信号驱动式I/O和异步I/O。 1. 阻塞式IO 阻塞式I/O,它在每一个连接创建时,都需要一个用户
阅读全文
摘要:一、Nginx 首先,来看看Nginx的作用与缺陷。 Nginx服务发现 Nginx是一个反向代理组件,那么Nginx需要知道应用服务器的地址是什么,这样才能够将流量透传到应用服务器上,这就是服务发现的过程。 缺陷: 服务器的变动,就需要修改客户端配置后,重启所有的客户端进程,操作时间比较长; 服务
阅读全文
摘要:1. 如何保证消息不丢失? 消息确认机制 2. 如何保证消息只被消费一次? 为了保证消息丢失,需要付出两方面的代价:一方面是性能的损耗,一方面可能造成消息重复消费。为了保证消息只被消费一次,我们需要保证消费多条消息时所得到的结果就是相同的,即幂等的。消息在生产和消费的过程中都可能会产生重复,所以你要
阅读全文
摘要:官网SQL优化手段 sql优化没有固定的标准,本质上就是做减法,减少io、cpu等消耗,让sql执行的更快,最终达到我们的性能要求。以下是一些常规性的建议,希望能让大家少踩些坑。 案例:创建10万数据 DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sy
阅读全文
摘要:主从同步的优点: 读写分离提高数据库并发处理能力 数据备份 高可用性。也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务的正常运行。 Binlog&Undolog 二进制日志(Binlog):存储的是一个又一个事件(Event),这些事件分别对应着数据库的更新操作,比如INSERT
阅读全文
摘要:MVCC:多版本并发控制技术。保存数据的历史版本。这样我们就可以通过比较版本号决定数据是否显示出来。 InnoDB中的RC和RR隔离事务是基于多版本并发控制(MVCC)实现高性能事务。一旦数据被加上排他锁,其他事务将无法加入共享锁,且处于阻塞等待状态,如果一张表有大量的请求,这样的性能将是无法支持的
阅读全文
摘要:优化表设计 表结构要尽量遵循第三范式的原则,让数据结构更加清晰规范,减少冗余字段,同时也减少了在更新,插入和删除数据时等异常情况的发生。 反范式原则。如果分析查询应用比较多,尤其是需要进行多表联查的时候,可以采用反范式进行优化。当冗余信息有价值或者能大幅度提高查询效率的时候,我们就可以采取反范式的优
阅读全文
摘要:1. 索引的概述 索引可以帮助我们从海量的数据中快速定位想要查找的数据。不过索引也存在一些不足,比如占用存储空间、降低数据库写操作的性能等,如果有多个索引还会增加索引选择的时间。 索引主要有4种,分别是: 普通索引:是基础的索引,没有任何约束,主要用于提高查询效率。 唯一索引:在普通索引的基础上增加
阅读全文
摘要:事务的特性: A,也就是原子性(Atomicity)。数据操作是不可分割 C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,数据库的完整性约束不能被破坏。 I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。 D,指的是持久
阅读全文
摘要:1. 非关联子查询 子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行 例如:假设我们想要知道哪个球员的身高最高,最高身高是多少 select play_name, height from player where height = (select
阅读全文
摘要:聚集函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。 1. 聚集函数 SQL中的聚集函数一共包括5个: COUNT(role_assist)会忽略值为NULL的数据行,而COUNT(*)只是统计数据行数,不管某个字段是否为NULL。 AVG、MAX、MIN等聚集函数会自动
阅读全文
摘要:五、DQL——SQL函数 在SQL中我们也可以使用函数对检索出来的数据进行函数操作。 SQL函数会带来的问题: 使用的函数很可能在运行环境中无法工作。大部分DBMS会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。 注意大小写规范。 Linux的环
阅读全文
摘要:1. 筛选案例实操 查询所有最大生命值大于6000的英雄: select name from heros where hp_max > 6000 要查询所有最大生命值在5399到6811之间的英雄: select name from heros where hp_max between 5399 a
阅读全文
摘要:三、DQL——SELECT 1. 查询列 select name from heros select name, hp_max, mp_max, attack_max, defense_max from heros select * from heros 2. 起别名 select name as
阅读全文
摘要:在DML中,我们常用的功能是增删改,分别对应的命令是CREATE、DROP和ALTER。 1. 对数据库进行定义 CREATE DATABASE nba; // 创建一个名为nba的数据库 DROP DATABASE nba; // 删除一个名为nba的数据库 2. 对数据表进行定义 CREATE
阅读全文
摘要:一、概述 SQL有两个重要的标准,分别是SQL92和SQL99,它们分别代表了92年和99年颁布的SQL标准。 E-R(实体-关系)图 它是我们用来描述现实世界的概念模型,在这个模型中有3个要素:实体、属性、关系。 实体就是我们要管理的对象,属性是标识每个实体的属性,关系则是对象之间的关系。 SQL
阅读全文
摘要:在Java中CompletableFuture用于异步编程, 是 Future API的扩展。异步编程是编写非阻塞的代码,运行的任务在一个单独的线程,与主线程隔离,并且会通知主线程它的进度,成功或者失败。 Future Future 被用于作为一个异步计算结果的引用。提供一个 isDone() 方法
阅读全文
摘要:ln -s file file.s : 创建一个软链接,软链接就像windows 下基于文件路径创建的快捷方式,软链接行为和 windows 下的快捷方式差不多. -rw-r--r-- 1 sangxiaoqian staff 5 6 12 23:56 a.txt lrwxr-xr-x 1 sang
阅读全文
摘要:fastjson可以自动映射pos_id到posId。 JSON.parseObject(String, Class): 从String到POJO (JSONObject) JSONObject.parseObject(String): 从String到JsonObject (JSONArray)
阅读全文
摘要:一. 缓存穿透 当热点数据为空时,将会有大量请求到缓存,一旦数据库承受不了用户请求,查询就会变慢,大量的请求也会阻塞在数据库查询上,造成应用服务器的连接和线程资源被占满,最终导致系统崩溃,这样称为缓存穿透。 通常解决方案: 返回空值 我们从数据库中查询到空值或者发生异常时,我们可以向缓存中回种一个空
阅读全文
摘要:1. Cache Aside(旁路缓存) 这个策略数据以数据库中的数据为准,缓存中的数据是按需加载的。 数据更新: 更新数据库中的记录; 删除缓存记录 从缓存中读取数据; 如果缓存命中,则直接返回数据; 如果缓存不命中,则从数据库中查询数据,并将数据写入到缓存中,并且返回给用户。 2. read、W
阅读全文
摘要:六、分布式Trace简述 1. 请求要在多个服务之间调用,如何排查慢请求问题? 给同一个请求的每一行日志增加一个相同的标记,比如我们可以在程序的入口处生成一个requestId,然后把它放在线程的上下文中,这样就可以在需要时随时从线程上下文中获取到requestId了。 String request
阅读全文
摘要:4.6 轻量级锁、偏向锁——Monitor升级 JDK6之前的加锁方式是:关联锁对象到Monitor进行加锁,Monitor是由操作系统提供的,加锁代价高。 JDK6之后,对加锁方式进行了优化,引入了轻量级锁、偏向锁等。 1. 轻量级锁 如果一个对象虽然有多个线程要加锁,但是加锁的时间是错开的(没有
阅读全文
摘要:4.5 Monitor (重量级锁) Monitor被翻译为监视器或管程, 在Java中每个对象可以关联一个Monitor对象,Monitor是操作系统提供的、用于实现对象的加锁机制的角色。 使用Monitor(重量级锁)给synchronized对象加锁的过程: Java对象被加锁,则MarkDo
阅读全文
摘要:4.3 线程安全类 线程安全类:String、Integer、StringBuffer、Random、Vector、Hashtable、java.util.concurrent(JUC)包下的类 注意:它们每个方法是原子的,但是多个方法的组合不是原子的。 String和Integer String和
阅读全文
摘要:Java对象由对象头+对象体组成。对象头大小为64比特,用于存储对象信息。对象头的分类为: 普通对象头: 64b 32b Mark Word:对象信息 32b Klass World:类名信息 数组对象头:96位 32b Mark Word:对象信息 32b Klass World:类名信息 32b
阅读全文
摘要:zebra是一个基于JDBC API协议上开发出的高可用、高性能的数据库访问层解决方案。通俗来说就是数据库访问的中间件,在JDBC和数据库连接池之上实现读写分离、分库分布等功能。一般来说Zebra在数据访问架构中位置如下^[2]^: Zookeeper/OCTO/Nacos:注册中心,存储了数据库的
阅读全文
摘要:一、mapStruct映射工具 1.1 功能 在编译时期是处理映射注解,实现类到类之间的映射 MapStruct vs BeanUtils BeanUtils: 在运行时根据反射动态赋值 缺点:动态赋值,存在大量的反射调用,性能较低;内存占用多,不适合高并发应用场景 MapStruct:在编译时静态
阅读全文
摘要:十、正则表达式 1. 匹配符 . 匹配除回车“\n”以外的任意字符 () 自定义字符串分组(a|b) a或b [] 自定义一个匹配的字符 [0-9] [a-z] [^] 自定义取反的一个匹配字符 [^0-9] 非数字 \ 转义字符 2. 限定符 * 某个字符之后加星号表示该字符不出现或出现多次 a*
阅读全文
摘要:九、Shell工具 1. cut cut:的工作就是剪,具体说就是从文件中剪切出想要的数据。 cut的原理:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。 基本语法 cut [选项] filename 选项: -f:列号,提取第几列 -d:分隔符,按照制定分隔符分割列,默认分隔符是
阅读全文
摘要:七、系统函数 1. basename——文件名 basename [string / pathname] [suffix]: 删除字符串或者地址中所有前缀,然后将字符串显示出来 选项: suffix后缀:如果suffix被指定了,basename删除字符串后者地址中的后缀 案例实操 sangxiao
阅读全文
摘要:五、流程控制 1. if if [ 条件 ] then 程序 elif [ 条件 ] then 程序 fi if后要有空格 中括号和条件判断式之间必须有空格 案例实操 输入一个数字,如果是1,则输出“I love cat”,如果是2则输出“I love dog”,如果是其他,则输出“I love a
阅读全文
摘要:六、read读取 read可以读取控制台输入 read(选项)(参数) 选项: -p: 指定读取值时的提示 -t:指定读取值时等待的时间 参数: 变量:指定读取值的变量名 #!/bin/bash read -p "please enter your name: " -t 10 NAME echo
阅读全文
摘要:四、条件判断 1. [ condition ]——条件判断 condition前后要有空格 返回true:条件非空即为true,如[ str ] 返回false:条件为空,则返回false, 如[] 2. 整数比较 = : 字符串比较 -lt:小于(less than); -le:小于等于(less
阅读全文
摘要:二、Shell变量 1. 系统变量 $HOME:获取用户家目录,/Users/sangxiaoqian $PWD: 获取当前目录 $SHELL: 获取系统默认解析器 $USER: 获取当前用户名,sangxiaoqian $PATH: 获取系统的环境变量,/usr/local/bin:/usr/bi
阅读全文
摘要:三、运算符 1. "$((运算式))"或"$[运算式]" #!/bin/bash echo "$[3 + 2]" echo `expr 3 \* 2` echo "$[10 / 5]" 2. expr +, -, \*, /, %: 加减乘除,取余 注意:expr和运算符之间, 运算符和操作数之间要
阅读全文
摘要:Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核执行命令。 Shell也是一个功能强大的编程语言,易编写,容易调试,灵活性强。 **Shell:**命令解释器,根据输入的命令执行相应命令 查看当前系统的Shell: cat /etc/shells 查看当前系统正在使用的s
阅读全文
摘要:三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出
阅读全文