- 博客(120)
- 收藏
- 关注
原创 redis基本类型底层原理
一、简单动态字符串(simple dynamic string,SDS)struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];};struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串...
2023-03-11 22:26:17 454
原创 mysql目录
01.MySQL体系结构与存储引擎_lss446937072的博客-CSDN博客02.一条SQL的查询/更新是如何执行的_lss446937072的博客-CSDN博客
2022-02-14 23:27:26 383
原创 架构篇之阿里十亿并发项目
目录(1)高并发系统通用解决方案:(2)架构分层(3)系统设计目标一:怎样做到高性能(4)系统设计目标二:怎样做到高可用(5)系统设计目标三:怎样做到易于扩展(7)池化技术(8)数据库优化方案(一)读写分离(9)数据库优化方案(二)分库分表(10)分布式ID唯一性(11)NoSQL与数据库互补(12)缓存(1)高并发系统通用解决方案:1.横向扩展:分而治之,分布式部署分散流量 方案:数据库一主多从,分库分表,存储分片2.缓存3.异步摩尔定...
2022-02-13 22:08:29 623
原创 温故知新系列
(1) DDD面试篇_lss446937072的博客-CSDN博客(2) 设计模式概览_lss446937072的博客-CSDN博客(3) springCloud面试篇_lss446937072的博客-CSDN博客(4) JVM系列_lss446937072的博客-CSDN博客(5) redis系列目录_lss446937072的博客-CSDN博客(6) mysql知识汇总(贼有用)_lss446937072的博客-CSDN博客(7)并发编程目录_lss446937072的博客-..
2022-02-13 21:36:52 619
原创 DDD面试篇
背景:程序员都是面向数据库思维,拿到业务需求之后,第一时间考虑数据库层面的东西,需要哪些表+怎么操作,一顿CRUD之后业务需求就完成了(SSM框架+springBoot+springCloud,controller+service+dao+mapper(mybatis写sql))问题:代码完全丢弃了所有的业务语义,代码跟真实的业务流程,业务模型没关系。导致数据库思维写出来的代码和业务脱离严重,可读性&可维护性差玩DDD分四步:1)战略建模2)战术建模3)代码落地(业内比较好的实践以及开源的
2022-01-31 00:08:33 6034 2
原创 springCloud面试篇
SpringBoot JAVA编写=========================@SpringBootApplication复合注解(1)SpringBootConfiguration(本质是Configuration)(2)CompaonentScan(3)EnableAutoConfiguration 启动的时候SpringBoot扫描到该注解会使用spring框架的SpringFactoriesLoader去扫描classPath下所有META-INF/spring.factories文件
2022-01-09 20:00:42 545
原创 java知识回顾01
https://blog.csdn.net/weixin_47340771/article/details/120370977https://www.cnblogs.com/cac2020/p/11821299.htmlhttps://segmentfault.com/a/1190000023007186https://blog.csdn.net/csdn10086110/article/details/95775260https://blog.csdn.net/wangzizhizu/articl
2021-11-01 21:21:10 87
原创 分布式事物
一.2PC-XA协议二.3PC三.本地消息表四.可靠消息最终一致性方案五.最大努力通知方案一.2PC-XA协议XA事务由一个或多个资源管理器(Resource Managers)、一个事务管理器(Transaction Manager)以及一个应用程序(Application Program)组成资源管理器(RM):参与者。提供访问事务资源的方法。通常一个数据库就是一个资源管理器事务管理器(TM):协调者。分配标识符,监视事务的进度,并负责事务完成和故障恢复。应用程序(A
2021-04-24 13:02:25 190
原创 分布式session
1.tomcat + redis2.spring session + redis1.tomcat + redis这个其实还挺方便的,就是使用session的代码跟以前一样,还是基于tomcat原生的session支持即可,然后就是用一个叫做Tomcat RedisSessionManager的东西,让所有我们部署的tomcat都将session数据存储到redis即可。在tomcat的配置文件中,配置一下<Valve className="com.orangefunction.t
2021-04-24 12:46:54 112
原创 分布式ID
分布式ID需要满足那些条件?生成唯一健的方式:1.UUID2.数据库自增主键3.数据库集群双主模式4.基于数据库的号段模式5.基于Redis模式6.雪花算法(Snowflake)模式分布式ID需要满足那些条件?全局唯一:必须保证ID是全局性唯一的,基本要求 高性能:高可用低延时,ID生成响应要块,否则反倒会成为业务瓶颈 高可用:100%的可用性是骗人的,但是也要无限接近于100%的可用性 好接入:要秉着拿来即用的设计原则,在系统设计和实现上要尽可能的简单 趋势递增
2021-04-24 12:30:32 145
原创 GuavaCache的Demo
cache接口public interface Cache { <T> T get(Object key, Class<T> type); boolean has(Object key); void put(Object key, Object value); void del(Object key);}cache工厂public class CacheFactory { private static class
2021-04-08 15:09:45 276
原创 创建线程池Demo
@Componentpublic class BlacklistRuleHandlerProxy { private final static ExecutorService EXECUTOR_SERVICE; static { EXECUTOR_SERVICE = Executors.newFixedThreadPool(10, new ThreadFactory() { private AtomicInteger count = new.
2021-04-08 14:50:15 84
原创 java8的Stream处理
1)Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定key-value,value是对象中的某个属性值。Map<Integer,String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId,User::getName));Map<Inte.
2021-04-08 11:43:28 362
原创 黄金为什么不会贬值???
你知道黄金是地球上不可再生资源,它来源于外太空的陨石,大约在40亿年前一个中子星爆炸后产生的密度极高的元素,其中就有黄金,黄金生成后会随着恒星爆发而与其他元素一起避开恒星表面抛洒到宇宙之中,并与宇宙中原有的星际物质混合起来,在这个过程中,黄金很难集中在一起形成新的星球,其中一些黄金与地球碰撞,由于金元素的密度要大于地球上的其他元素,所以在漫长的气质运动中金元素逐渐向地心沉降,这导致了地球上99%以上的黄金都进入了地核。在宇宙中中子星发生大爆炸。并不多见,而且并不是所有的元素都会成为黄金,只有1%的元素会变成
2021-04-08 11:02:58 3149
原创 初始化静态资源Demo
@Datapublic class Inner3MappingConfig { private Logger LOGGER = LoggerFactory.getLogger(Inner3MappingConfig.class); private static final HashMap<String,HashMap<String,String>> inner3MappingConfigMap = new HashMap<>(); priv.
2021-04-08 10:56:22 110
原创 枚举Demo
public enum ContactTypeEnum { CALL_CONNECTED("CallEstablish","通话建立、转接"), BE_CONSULT_CONNECTED("BeConsultEstablish","被咨询"), BE_CONFERENCED("BeConferenceEstablish","被会议"), CONSULT_TRANSFER("ConsultTransfer","咨询转接"); private String code.
2021-04-08 10:53:53 72
原创 简单redis锁
@Componentpublic class DistributedLock { private static final Logger LOGGER = LoggerFactory.getLogger(DistributedLock.class); @Resource(name = "cscRedisClient") private RedisStoreClient redisStoreClient; private static final String LOC.
2021-04-08 10:52:39 193
原创 MAC在根目录下创建文件夹
1、重启mac,按住Command+R,等到系统进入安全模式。2、选择一个账户,然后点击屏幕上方的工具栏找到命令行工具。3、执行,命令 csrutil disable4、重启电脑后,不要进入安全模式,执行命令sudo mount -uw /5、在/目录下执行命令sudo mkdir -p data6、执行命令sudo chmod -R 777 /data...
2021-04-08 10:50:33 1339
原创 设计模式之备忘录模式Memento
目录1.概念2. Demo每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。 其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时...
2021-03-24 23:06:51 121
原创 设计模式之责任链模式ChainOfResponsibility
目录1.概念2.Demo3.架构中的应用 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名。 在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常;还有 Struts2 的拦截器、J
2021-03-24 21:17:30 132
原创 设计模式之中介者模式Mediator
目录1.概念2. Demo在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他所有的朋友修改,这叫作“牵一发而动全身”,非常复杂。 如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建...
2021-03-23 23:57:44 95
原创 设计模式之观察者模式Observer
在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。1.概念观察者模式(Observer)定义:多个对象间存在一对多的关系,当一个对象的关系发生改变时,所有依赖它的对象都会得到通知并自动更新,这种模式有时又被成为发布-订阅模式。优点:降低了观察者与目标对象之间的耦合关系,两者之间是抽象耦合关系...
2021-03-23 23:41:12 100
原创 设计模式之访问者模式Visitor
在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同。 这些被处理的数据元素相对稳定而访问方式多种多样的数据结构,如果用“访问者模式”来处理比较方便。访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的处理方法,且不用修改原来的程序代码与数据结构,这提高了程序的扩展性和灵活性。1. 模式的定义与特点访问者模式定义(Visitor):将作用与某种数据中的各个元素的
2021-03-23 18:35:07 212
原创 设计模式之策略模式Strategy
目录1. 概念2.demo3. 模式在开源软件中的应用在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复.
2021-03-23 18:29:31 132
原创 0.设计模式概览
1)设计模式的意义2)设计原则3)设计模式分类结构型模式(更优雅的生命和创建对象) 适配器模式(兼容语义相同但是接口表达不同的多个接口) 代理模式(增加对象的行为语义,控制目标对象行为,代理与被代理对象不要求同源,不允许直接访问被代理对象) 装饰器模式(增强对象行为语义,不控制目标多详行为,装饰对象与被装饰对象要求同源,允许自由访问被装饰对象) 组合模式(父体和个体要求同源,要感知和追溯到个体) 门面模式(服务提供者:屏蔽内部结构,使内部发展变化和外部需求变化解耦。服务使用者:
2021-03-13 11:03:09 111
原创 13.设计模式之适配器模式
目录1. 概念2.demo3. 模式在开源软件中的应用 在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。
2021-03-13 11:02:40 112
原创 17.设计模式之门面/外观模式
目录1. 概念2.demo3. 模式在开源软件中的应 软件系统中,当一个系统的功能越来越强,子系统会越来越多,客户端对系统的访问也会变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。1. 概念外观模式(Facade)定义:为多个复杂的子系统提供一个对外的接口,使这些子系统更加容易的被访问。该模式对外有一个统一的接口,外部应用不用关心子系统
2021-03-13 10:19:03 139
原创 6.设计模式之代理模式Proxy
目录1. 模式的定义与特点2. 模式的结构与实现 2.1模式的结构2.2 模式的实现2.2.1 静态代理2.2.2 动态代理2.2.3 Cglib 动态代理3. 模式在开源软件中的应用3.1 Spring.AOP3.2 Mybatis 中的应用在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女...
2021-03-11 00:08:52 230
原创 15.设计模式之组合模式
目录1. 概念2.模式的结构与实现3. 模式在开源软件中的应用3.1 java.util.HashMap 类3.2 java.util.ArrayList 类 在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。1.
2021-03-10 23:46:26 96
原创 11.装饰者模式
目录1.概念1.1模式的定义1.2 优缺点以及使用场景2. Demo3.模式在开源软件中的应3.1java.io.BufferedReader 类3.2 springframework...TransactionAwareCacheDecorator3.3 org.apache.ibatis.cache.*.BlockingCache 类 在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些现存的组件。这些
2021-03-10 23:26:50 118
原创 配置中心是如何实现实时推送的:长轮询
目录一 背景二 数据交互三 长轮询与轮询四 配置中心长轮询设计五 配置中心长轮询实现1 客户端实现2 服务端实现3 启动配置监听六 实现细节思考1)为什么需要定时器返回 3042)长轮询包含多组 dataId七 长轮询和长连接八 总结一 背景传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的开关,重启应用就显得有点大动...
2021-03-10 22:56:05 546
原创 05.难搞的mysql锁
1.锁的分类1)从对数据操作的类型分类: 读锁(共享锁):针对同一份数据,多个读操作可以同时进行,不会互相影响 写锁(排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁 2)从对数据操作的粒度分类:为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是很耗资源的事情(涉及获取,检查,释放锁等动作),因此数据库系统需要在高并发响应和系统性能两方面进行平衡,这样就产生了“锁粒度(Lock granula...
2021-03-05 16:34:31 104
原创 03.索引概览
目录1)索引优劣势2)MySQL索引分类数据结构角度从物理存储角度从逻辑角度3)MySQL索引结构B-TreeB+TreeMyISAM主键索引与辅助索引的结构InnoDB主键索引与辅助索引的结构主键索引:辅助(非主键)索引:Hash索引full-text全文索引R-Tree空间索引哪些情况需要创建索引哪些情况不要创建索引覆盖索引最左前缀原则索引下推 MYSQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取
2021-03-05 15:53:25 162
原创 04.数据库事务
隔离性与隔离级别提到事务,你肯定会想到ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)。今天我们就来说说其中I,也就是“隔离性”。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此
2021-03-05 14:52:00 105
原创 多线程面试题
1.多线程有什么用? 1)发挥多核CPU 的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的 ,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上 就浪费了 50%, 在 4 核 CPU 上就浪费了 75%。单核 CPU 上所谓的"多线程"那是 假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快, 看着像多个线程"同时"运行罢了。多核 CPU 上的多线程才是真正的多线程,它能 让你的多段逻辑同时工
2021-02-25 23:25:51 502
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人