
理论笔记
文章平均质量分 87
理论概念、面试问题
占星安啦
积累开发技术的点点滴滴,每周进步一点点就好
展开
-
mybatis查询修改mysql的json字段
mysql5.7版本之后支持json字段类型,推荐mysql8版本,适用于属性不确定的个性化字段,比如:身份信息{“职业”,“学生”,“兴趣”:“打乒乓球”,“特长”:“跳高,书法”};图片信息{“日期”:“2023-12-12 22:12”,“尺寸”:“215*720”,“拍摄地”:“xxx”,“作者”:“xxx”};标签信息:[“历史”,“军事”,“都市”,“科幻”]。这部分信息每条数据差异较大,固定字段会大量冗余,使用json有较高的扩展性和自由度。原创 2024-02-02 15:34:33 · 1703 阅读 · 0 评论 -
面试题:MySQL
首先根据业务场景来决定使用什么字段作为分表字段 (sharding_key),比如我们现在日订单 1000 万,我们大部分的场景来源于 C 端,我们可以用 user_id 作为 sharding_key,数据查询支持到最近 3 个月的订单,超过 3 个月的做归档处理,那么 3 个月的数据量就是 9 亿,可以分 1024 张表,那么每张表的数据大概就在 100 万左右。覆盖索引指的是在一次查询中,如果一个索引包含或者说覆盖所有需要查询的字段的值,我们就称之为覆盖索引,而不再需要回表查询。转载 2021-06-16 17:57:29 · 1499 阅读 · 0 评论 -
面试题:什么是悲观锁 & 乐观锁?
悲观锁有 & 乐观锁首先,悲观锁与乐观锁是根据操作时是否锁住资源来判别的。悲观锁获取到锁时,必须要锁住资源;乐观锁则不会。一开始两线程争抢锁:线程访问资源. jpg悲观锁悲观锁之所以悲观,那是因为它觉得如果不锁住这个资源,别的线程就会来争抢,造成数据结果错误,所以悲观锁为了确保结果的正确性,会在每次获取并修改数据时,都把数据锁住,让其他线程无法访问该数据,这样就可以确保数据内容万无一失,从这点看悲观锁特别稳。下面通过几张图,大概就能明白悲观锁的执行过程了:接上面场景,如果 A 拿到锁,原创 2021-06-11 23:51:39 · 2289 阅读 · 0 评论 -
面试题:Java 多线程99问
1. 什么是进程?进程是系统中正在运行的一个程序,程序一旦运行就是进程。进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。2. 什么是线程?是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。3. 线程的原创 2021-06-08 10:16:50 · 1905 阅读 · 1 评论 -
面试题:HashMap汇总
1:HashMap 的数据结构? A:哈希表结构(链表散列:数组 + 链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。2:HashMap 的工作原理? HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry 接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给 put() 方法:①、调用 hash(K) 方法计算 K 的 hash 值,然后原创 2021-06-05 20:07:00 · 1481 阅读 · 0 评论 -
分布式事务相关理论
1 事务简介事务 (Transaction) 是操作数据库中某个数据项的一个程序执行单元(unit)。事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID 特性。(1)原子性(atomicity):个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。比方说:买东西要么交钱收货一起都执行,要么发不出货,就退钱(2)一致性(consisten原创 2021-05-24 17:43:56 · 1096 阅读 · 0 评论 -
IDEA 官方文档-最全操作说明
https://www.w3cschool.cn/intellij_idea_doc/intellij_idea_doc-t6k92d34.html原创 2020-11-02 15:46:49 · 1493 阅读 · 0 评论 -
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
前言生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来、电动车被偷等等。但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就可以轻轻松松地把你电动车给「顺走」,不然打工怎么会是他这辈子不可能的事情呢?牛逼之人,必有牛逼之处。那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。如何用好锁,也是程序员的基本素养之一了。高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则性能会降低。所以,知道各转载 2020-10-24 19:17:32 · 512 阅读 · 0 评论 -
TCP与UDP协议区别
TCP和UDP>都是来自于传输层的协议。传输层是位于第2层的,如下图所示。传输层位于应用层和网络层之间,负责位于不同主机中进程之间的通信。之前一位老哥问我:不同电脑之间是如何通信的呢?是不是还要自己开发协议什么的。分析:这位老哥觉得如果开发一个应用需要自己定义协议。其实也并不是没有道理的,协议是什么?协议就是双方通信共同遵守的规则,被称之为协议。像怎么使用的HTTP,FTP这些都属...转载 2020-04-16 10:19:11 · 811 阅读 · 0 评论 -
什么是线程安全
多线程为了提高CPU的使用率,cpu在同一时刻执行多个任务。在jvm的世界里,线程就像不相干的平行空间,串行在虚拟机中,java采用多线程的方式去同时完成几件事情而不互相干扰。要了解多线程,首先要了解串行和并行的概念,这样才能更好地理解多线程。串行串行其实是相对于单条线程来执行多个任务来说的,就拿下载文件来举个例子:当下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是说,必须...原创 2020-01-29 11:53:13 · 588 阅读 · 0 评论 -
减少平均时延的策略
为了提高服务的高可用性,减少时延带来的诟病,采取减少平均时延策略, 可用方式有哪些?如何将此策略与现在流行的微服务框架结合,给出你熟悉微服 务框架的融合的设计方案。服务调用(通信)可以分为以下几个层级injvm 进程内innative 主机内instack 机架内inzone 机房内inregion 区域内global 跨区域在设计微服务调用时,尽量使用上面层级的,而不是下面层...原创 2020-01-07 14:26:27 · 1318 阅读 · 0 评论 -
使用RedisTemplate缓存List的一系列操作示例
List常用操作首先新建两个list用来做后面得举例操作,便于理解List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3");List<String> list2 = new ArrayList&...转载 2019-11-22 10:17:39 · 2026 阅读 · 0 评论 -
请求重试,异常重试
需求:夜间定时任务比较多,偶尔遇到请求超时的情况,也可能是网络波动,总之需要做请求失败重试。1,引入spring-retry注解 <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</art...原创 2019-11-07 15:25:20 · 1464 阅读 · 0 评论 -
正则表达式-提取json属性值
在线测试及常用表达式元字符\d : 0-9之间的任意一个数字 \d只占一个位置\w : 数字,字母 ,下划线 0-9 a-z A-Z _\s : 空格或者空白等\D : 除了\d\W : 除了\w\S : 除了\s . : 除了\n之外的任意一个字符 \ : 转义字符 | : 或者() : 分组\n : 匹配换行符\b : 匹配边界 字符串的开头和结尾 空格的两边都是边...原创 2019-10-18 10:26:38 · 8784 阅读 · 0 评论 -
Spring Data JPA用法
官网文档1,常规查询@ToString@Getter@Setter@Entity@Table(name="user")@ApiModel@JsonIgnorePropertiespublic class User implements Serializable { @Id private int qq; ... //如果命名规范,不加@Column也可以...原创 2019-03-31 12:21:12 · 224 阅读 · 0 评论 -
观察者模式ApplicationListener异步处理事件
配置类中添加 @EnableAsync开启对异步任务的支持,并在相应的方法中使用 @Async注解来声明一个异步任务Environment 可以直接获取配置文件的值@Configuration@EnableAsyncpublic class TaskExecutorConfig { /*** * 创建异步任务执行线程池 * @return */ ...原创 2019-04-13 14:30:57 · 3285 阅读 · 0 评论 -
oracle11 创建自动分区表
--1,重命名原表 SCAN_LOG 为SCAN_LOG_BCK--2,创建按天自动分区的库存日志表,从2019-03-01日开始create table SCAN_LOG( DOC_ID VARCHAR2(20), SDOC_ID VARCHAR2(40), SCAN_SITE VARCHAR2(20), SCAN_TYPE VARCHAR2(20), SUCCE...原创 2019-04-13 14:33:35 · 791 阅读 · 0 评论 -
redis实现session共享
springboot中redis的基本使用1,pom引入redis<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependenc...转载 2019-06-05 20:31:56 · 269 阅读 · 0 评论 -
Redis常用命令
意义命令连接redisredis-cli -h 127.0.0.1 -p 6379查看key的数量DBSIZE获取值keys ds_get keyword;get key1设置keyset key1 value1获取所有keykeys *删除keydel key1判断是否存在exists key设置过期时间(秒)expi...原创 2019-02-19 19:52:32 · 143 阅读 · 0 评论