- 博客(69)
- 资源 (5)
- 收藏
- 关注
原创 RPC与REST
就只有 RPC,开发者是围绕着“远程方法”去设计两个系统交互的,这样做的坏处不仅是“如何在不同系统间表示一个方法”、“如何获得接口能够提供的方法清单”都成了需要专门协议去解决的问题,更在于服务的每个方法都是独立的,服务者必须熟悉每个方法才能使用,而REST抽象为了几类。而远程服务又不仅仅是为了分布式系统服务的,在网络时代,浏览器、移动设备、桌面应用和服务端的程序,普遍都有与其他设备交互的需求,所以今天很难找到没有开发过远程服务的人,但是没有正确理解远程服务的coder比比皆是。
2024-07-06 16:35:54
959
2
原创 MySQL 索引,聚簇索引、覆盖索引
索引是一个很复杂的话题。MySQL 中,大多数情况下选择 B+Tree 索引,其他的只适用于特殊目的。在选择索引和编写利用这些索引的查询时,有如下三个原则当行查询很慢,如果服务器从存储中获取一个数据只是为了获取其中一行,就浪费了很多工作,这时候索引就可以提升效率;按顺序访问范围数据时是很快的;索引覆盖查询是很快的,因为不需要回表查找行。总的来说,编写查询语句时尽可能选择合适的索引以避免单行查找,尽可能使用数据原生顺序从而避免额外的排序,并尽可能使用覆盖索引查询。
2022-11-02 11:01:01
560
原创 MySQL 存储引擎、事务、多版本并发控制(MVCC)、数据类型
InnoDB 内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读,能够自动在内存中创建 hash 索引加速读操作的自适应哈希索引,以及能加速插入操作的插入缓冲区(Insert Buffer)等。解析查询会创建对应的解析树,然后对其各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。一列保存了行的创建时间,一个保存行的过期时间(或删除时间),这个时间是系统版本号,每开始一个新的事务,系统版本号就会自动递增。主键索引的叶子结点包含了整行数据,而二级索引的叶子节点存储的是主键索引的值。
2022-11-02 10:51:31
397
原创 经典垃圾收集器 CMS、G1
7. G1 提供了两种 GC 模式,Young GC 和 Mixed GC,两种都是完全 Stop The World 的,Young GC 会选取所有年轻代的 Region,Mixed GC 选定所有年轻代的 Region 和统计出的收益高的老年代 Region。5. G1 之所以能简历可预测的停顿时间模型,是因为它将 Region 作为回收的最小单元,每次回收都是 Region 大小的整数倍,这个大小即根据优先级列表排出的收益最大,这也是 Garbage First 的由来。
2022-11-01 17:49:05
628
原创 垃圾收集器与内存分配策略
即使在可达性分析算法中判定为不可达的对象,也不是“非死不可”的,这时他们还处于“缓行”期,要真正宣告一个对象的死亡,至少要经历两次标记:没有与 GC Roots 相连的对象会被第一次标记,随后进行一次筛选,筛选的条件是词对象是否有必要执行。在Java 体系中,固定可作为 GC Roots 的对象包括以下几种:1.在VM栈中引用的对象 2. 方法区中类静态属性引用的对象 3. 方法区中常量引用的对象 4. 本地方法栈中 JNI 引用的对象等等。这种,强引用下不会被回收。,相比之下,方法区的回收效率要低得多。
2022-11-01 17:45:19
201
原创 MyBatis 笔记
Mybatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。Mybatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。Mybatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(普通老式 Java 对象)为数据库中的记录。我们既然要学习 MyBatis ,就必须知道它是以 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例通过 SqlSessionFactoryBuilder 获得。
2022-09-02 17:58:36
304
原创 Linux 命令行——文本处理命令:cat、sort、uniq、cut、comm、diff、patch
文本处理命令:cat、sort、uniq、cut、comm、diff、patch
2022-06-26 10:34:51
714
原创 Linux 命令行——gzip、gunzip、bzip、bunzip、tar、zip等命令
linux gzip、gunzip、bzip、bunzip、tar、zip
2022-06-26 10:34:00
1062
原创 Linux 命令行——网络系统、ping、netstat、ftp、wget、ssh
linux 网络系统、ping、netstat、ftp、wget、ssh
2022-06-26 10:32:19
463
原创 Linux 命令行——权限、读写执行、chmod
权限:在 Unix 安全模型中,一个用户可能拥有文件和目录。当一个用户拥有一个文件或目录时,用户对这个文件或目录的访问权限拥有控制权。用户反过来又属于一个由一个或多个用户组成的用户组,用户成员由文件或目录的所有者授权对文件和目录的访问权限。除了对一个用户组授权外,文件所有者可能给所有的人授权,在 unix 中,可以用 id 命令来找到关于你自己的身份信息::uid=0(root) gid=0(root) groups=0(root) 当用户创建账户后,系统会给用户分配一个号码,叫做用户 ID 或 uid,这
2022-06-25 11:27:43
2826
原创 Linux 命令行—— I/O 重定向之cat、sort、uniq、sort、grep、wc、head、tail
I/O 重定向之cat、sort、uniq、sort、grep、wc、head、tail
2022-06-25 09:51:03
494
原创 Linux 命令行——history 和文件系统命令
@TOC(history 和文件系统命令)查看历史:history | less找出和某个目录相关的历史:history | grep /usr/local复用历史命令: 上述查出的各字段含义如下:查看文件类型:file 文件名查看文件内容:less 文件名操作文件和目录:在当前目录下创建目录:mkdir 目录…复制文件和目录:移动和重命名文件:删除文件和目录:......
2022-06-25 09:39:38
333
原创 Spring Boot 缓存
Spring Boot 使用缓存在系统访问量越来越大后,首先出现瓶颈的往往是数据库,而为了减少数据库的压力,我们可以选择如下方式优化(暂时不考虑优化数据库的硬件、索引等):读写分离:通过将读操作分流到从节点,避免主节点过大。分库分表:通过将读操作分摊到多个节点,避免单节点压力过大。缓存:相比数据库来说,缓存往往能够提供更快的读速度,从而减小数据库的压力。Spring Cache:Spring 3.1 引入了激动人心的基于注释的缓存技术,它本质上不是一个具体的缓存实现方案(如 EhCache
2022-04-13 12:27:46
2611
原创 Redis 实战
RedisRedis 是一个开源的,高级的键值对存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。场景:在互联网中经常用来缓存热点数据:1. redis 数据在内存中,可以保证读取的高效(接近每秒数十万次);2. 减少下层持久层数据库读取压力,像 mongodb,每秒近千次就有压力;3. redis 单线程运行,天然具备读写的原子性使用:1. 先 get 读取 redis,没有读到再去 db;将 db 读到的数据 set 到 redis 中,返回数据。2. 更新:del 掉 red
2022-04-13 12:24:27
1163
原创 分布式缓存与本地缓存的区别
分布式缓存与本地缓存的区别转载自:https://ost.51cto.com/posts/1002缓存的概念:在服务端中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问;解决了高并发场景中数据库容易成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理,提高了数据的访问速度和程序性能。而根据缓存是否与应用程序属于同一进程,可以将内存分为本地缓存和分布式缓存。本地缓存是在同一个进程内的内存空间中缓存数据,数据读写都是在同一个进程内完成
2022-04-12 12:48:39
2231
原创 ShardingSphere 学习
ShardingSphere 学习中遇到的一些概念及总结先来了解下什么是 ShardingSphere:ShardingSphere确实是以分片为核心、其他功能为辅助的中间件。但Apache ShardingSphere的定位并不仅仅是用于分片的数据库中间层,它其实是一个可插拔平台。无论分片、读写分离、分布式事务、高可用治理、SQL审计、数据脱敏、数据扩容等功能,都将以SPI的形式加入到ShardingSphere平台中,ShardingSphere最终只是一个空白的可以跑的数据库协议+高性能IO的骨架。
2022-03-31 19:01:42
2062
原创 前期绑定和后期绑定
前期绑定和后期绑定转载自:https://blog.csdn.net/youngyouth/article/details/79747043在多态的时候,我们将子类的类型向上转换为父类,进行类型的泛化,便于我们写出实用性很强的代码,新类型不用改变原有代码。这里有个问题就是:任何类型传进去都是父类型 ,但是在方法调用的时候,却是调用的子类的方法,或者说,编译器是怎么知道,具体该调用哪一个方法的呢?这就与前期绑定和后期绑定有关系了。前期绑定前期绑定是面向过程语言的编译器做法:编译器在编译面向过
2022-03-31 18:58:49
780
原创 logback 日志使用
项目中的日志打印这些日志都打印到哪里去了?我们可以看到控制台有日志打印,但是在项目里也可以发现日志,这有什么区别吗?这个对于日志来说是可以选择的,可以配置。所以了解了下日志,东西还不少,记录如下:这里使用 logback, spring 自带 logback 和 slf4j 的依赖,日志框架会在项目启动时默认加载classpath 下命名为 logback-spring 或 logback 的文件。日志基本格式日志输出主要在文件中,应包括以下内容:时间、日志级别、调用链标识(可选)
2022-03-31 18:56:26
770
原创 关于 Spring Boot 中的一些注解使用
1. 关于项目中使用 @Autowired 注解刚开始接触 spring boot 的时候看到别人在字段上添加 @Autowired 自己也就跟着这样写了,刚开始只是注意到字段有下划线,这个如果是 Mapper 的话,在 dto 上添加 @Repository就可以解決,但是还是可以看到注解报错,鼠标悬浮显示“不推荐这样使用注解“,那么正确的方式是怎样的呢?有两种方式:基于构造函数的依赖注入:对于必须的依赖项,使用构造函数注入,可以使它们成为 final且不为null。综合来看 Constru
2022-03-31 16:25:24
336
原创 Mac 安装与配置 zookeeper
Mac 安装与配置 zookeeper以下来源:https://cloud.tencent.com/developer/article/1458839按照链接处理的话基本就不会出什么问题,记录一些小的点移动文件或文件夹:mv 当前目录下的XXX 目的地新建文件夹: mkdir XXX复制文件内容:cp 源文件 目标文件新建文件:touch XXX写入内容:echo “XXX”>>文件名Mac 打开某个找不到的目录:open /XX/xx创建一个服务节点,客户端登陆登陆查看l
2022-03-31 16:18:13
1842
原创 tcp/ip、http和socket区别
tcp/ip、http和socket区别首先要知道在网络结构中我们一直说的分层:http协议位于应用层,tcp协议位于传输层,ip协议位于网络层,它们三个层级依次递减。TCP/IP 是传输层协议,而 HTTP 是应用层协议,socket 是对TCP/IP 协议的封装,所以socket 可以看成是 TCP/IP。转载于:https://www.cnblogs.com/aspirant/p/11334957.htmlsocket和http的区别:Http协议:简单的对象访问协议,对应于应用层。Http
2022-03-31 16:06:46
155
原创 MySQL 中 InnoDB 引擎的 MVCC
MVCCmvcc : Multi-Version Concurrency Control(多版本并发控制),旨在实现对数据库的并发访问控制,在编程语言中实现事务内存。若有人从数据库读数据的同时,有另外的人写入数据,有可能读数据的人看到半写”或者不一致的数据。有很多方法来解决这个问题,叫做并发控制方法。最简单的方法就是加锁,让所有的读者等待写者工作完成,但这样会导致效率很低下。MVCC 使用了一种不同的手段,每个连接到数据库的读者,在某个时刻看到的是数据库的一个快照,写者写操作造成的变化在写操作完
2022-03-30 18:32:51
551
iTerm2 for macos
2022-03-15
c3p0-0.9.5.5.src.zip
2020-08-24
druid-0.1.10.jar
2020-08-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人