- 博客(229)
- 收藏
- 关注
转载 在踏入一个新业务时,思考&落地
任何企业的资源都是有限的。对于有限资源的运用,决定了企业的成败。那些成功的企业,必然也是能将有限的资源、换回最大价值的企业。所以,资源管理的逻辑,也是企业经营中的核心逻辑。对于成长期的企业、如果资源有限,我心目中,最佳的资源策略是——• 当企业资源有限时,先顾眼前,让自己活下去,在求生的过程中尽可能经营出更多的资源。•一旦有了资源,就应该把能投入的,都投入向未来。• 但是,投入必须有效、减少浪费。• 因此,新项目的投入,胜率是第一位的——胜率提升,才能追加资源。
2024-06-29 22:26:37
30
转载 《影响力》的六大原则和应用
随大流对于大多数人来说几乎是天性使然,尤其是情况不确定的时候,人们选择相信大多数人的选择,相信“群众的眼睛是雪亮的” 而不是自己的独立思考。如:你先称赞一个人非常的善良,有爱心,得到他肯定之后,然后提出募捐的请求,他大概是很难拒绝的。在拍卖会上出现的更普遍,拍卖的时候一方面资源稀缺(可能是一个价值连城的文物,也可能是一块很有商业前景的土地的使用权),另一方面竞争者甚众,在紧张的气氛和角逐中,价格往往会被抬得出其的高。这背后的心理活动就是:里面有钱时,我们会告诉自己,别人也觉得这个东西该捐钱,我不如也捐;
2023-10-04 11:06:52
360
转载 Spring AOP调用本类的事务方法失效
文章目录一、JDK动态代理1、实现方式2、反编译代理类的文件3、Proxy部分源码总结:问题一:本类中方法调用同类中方法会不会走代理?问题二:为什么必须要实现接口才能使用JDK动态代理?二、cglib动态代理1、实现方式2、代理类字节码编译核心问题:本类中调用本类自己的方法事务失效?1、对于JDK动态代理2、对于cglib动态代理首先要说明失效问题,必须要了解JDK动态代理和cglib动态代理的原理和调用方式。一、JDK动态代理1、实现方式理解JDK动态代理的实现原理:1.拿到被代理类的引用,并且
2022-05-04 21:48:11
3273
转载 spring事务(注解 @Transactional )失效的12种场景
文章目录一 、事务不生效【七种】1.访问权限问题 (只有public方法会生效)2. 方法用final修饰,不会生效3.同一个类中的方法直接内部调用,会导致事务失效3.1 新加一个Service方法3.2 在该Service类中注入自己3.3 通过AopContent类4.(类本身) 未被spring管理5.多线程调用6.(存储引擎)表不支持事务7.未开启事务二、事务不回滚【五种】1.错误的传播特性2.自己吞了异常3.手动抛了别的异常4.自定义了回滚异常5.嵌套事务回滚多了三、大事务与编程式事务1. 大事务
2022-05-04 15:57:04
32577
9
转载 大事务问题
大事务引发的问题:死锁,锁等待,回滚时间长 接口超时,数据库主从延迟,并发情况下数据库连接池被打满1.@Transactional注解是通过Spring的AOP起作用的,但是如果使用不当,事务功能可能会失效。2.@Transactional注解一般加在某个业务方法上,会导致整个业务方法都在这个事务中,粒度太大,不好控制事务范围。文章目录1.少于@Transactional注解2.将查询(select)方法放到事务外2.1 新加上一个service方法2.2 在该Service类中注入自己2.3 在该.
2022-05-03 20:14:56
1119
转载 SNAT源地址转换和DSNAT目标地址转换
SNAT企业内部的主机A想访问互联网上的主机C,首先将请求数据包(源:ipA,目标:ipC)发送到防火墙所在主机B,B收到后将数据包源地址改为本机公网网卡的ip(源:ipA,目标:ipB),然后经互联网发送给C;C收到后将回应包(源:ipC,目标:ipB)转发给C的路由器,经互联网将回应包转发给B,B收到回应包后修改其目的地址,即回应包改为(源:ipC,目标:ipA)然后将数据包转发给A。在这个过程中,修改了请求报文的源地址,叫做SNAT(source NAT POSTROUTING),用于局域网访问互
2022-02-07 22:28:28
1776
转载 单片机的机构框图
参考:https://www.bilibili.com/video/BV1r741147oz?from=search&seid=11799288157086794667&spm_id_from=333.337.0.0
2022-01-23 22:20:08
1592
转载 选择不纠结
文章目录001 终点站——从中点考虑问题002 指南针——坚持正确的方向003 金丝雀——确定底线004 白衬衫——减少选择罗胖给我们建议了四个点,分别是终点站、指南针、金丝雀,白衬衫。001 终点站——从中点考虑问题这里我们要分享一个概念——终局思维。即凡事先推想最终演化的局面是什么,然后倒退会今天,再实行决策。也就是说,我们决定做一件事情前,不要漫无目的,想得太长远,而是从达成这个目标之后,反推现在,进而做这件事的抉择。002 指南针——坚持正确的方向人生都在变,所以不变的东西比变化的东西
2022-01-01 22:37:53
328
转载 Java中的值传递和引用传递
问?当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。如果参数类型是基本数据类
2021-12-18 16:43:03
691
3
转载 HTTP请求过程-域名解析和TCP三次握手建立链接
我们在浏览器输入http://www.baidu.com想要进入百度首页,但是这是个域名,没法准确定位到服务器的位置,所以需要通过域名解析,把域名解析成对应的ip地址,然后通过ip地址查找目的主机。整个访问过程可以概括为:域名解析发起TCP三次握手建立连接建立连接后发起http请求服务器响应请求,浏览器获取html源码浏览器解析html代码,并请求相关css,js和图片资源浏览器渲染页面一、域名解析过程在浏览器输入一串域名要访问某网站的时候,浏览器帮我们做了如下事情(以Chrome浏览器
2021-10-04 22:52:13
1933
转载 HTTPS的原理
如果不进行加密,在网络上传输数据都是用的明文加密的话,会出现什么情况呢?假如你的数据含有银行卡的密码,你的账户上有几千万,那么假如中途杀入一个黑客,你的钱将不翼而飞而你却还不知道是在什么时候泄露了自己的密码。所以,对数据进行加密显得十分必要。而http就是明文传输的,显然需要一种更加安全的协议,也就是https协议。对称加密 有两个函数(也可以说是算法),其中一个假设叫f1(k,data),这个函数 拥有一个用来加密的密钥k以及需要进行加密的数据data,经过f1的运算后,得到一段加密后的密文,姑且称
2021-10-03 22:33:10
145
转载 SynchronousQueue实现原理
文章目录前言SynchronousQueue简单使用SynchronousQueue实现原理公平模式下的模型:非公平模式下的模型:总结前言SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能继续添加;可以认为SynchronousQueue是一个缓存值为1的阻塞队列,但是 isEmpty()方法永远返回是true,remainingCapacity() 方法永远返回是0,remove()和removeAll() 方法
2021-07-11 21:34:25
388
转载 内核级线程(KLT)和用户级线程(ULT)
文章目录进程和线程内核级线程(Kemel-Level Threads, KLT 也有叫做内核支持的线程)纯内核级线程特点用户级线程(User-Level Threads ULT)纯用户级线程的特点线程实现的组合策略组合策略进程和线程首先说一下线程对于进程的优势,这其实就是线程出现的意义。进程是资源拥有的基本单位,进程切换需要保存进程状态,会造成资源的消耗。同一进程中的线程,共享进程获取的部分资源。在同一进程中,线程的切换不会引起进程切换,线程的切换需要的资源少于进程切换,可以提高效率。内核级线程(K
2021-07-04 19:08:34
3308
转载 Spring @Transactional 事务机制
文章目录工作原理常见问题@Transactional不生效的情况遇到检测异常时,事务默认不回滚在业务层捕捉异常后,发现事务不生效工作原理运行配置@Transactional注解的测试类的时候,具体会发生如下步骤1)事务开始时,通过AOP机制,生成一个代理connection对象,并将其放入DataSource实例的某个与DataSourceTransactionManager相关的某处容器中。在接下来的整个事务中,客户代码都应该使用该connection连接数据库,执行所有数据库命令[不使用该conn
2021-05-24 20:47:24
359
转载 Spring事务传播机制
文章目录1. REQUIRED2. SUPPORTS3. MANDATORY4. REQUIRES_NEW5. NOT_SUPPORTED6. NEVER7. NESTEDSpring管理的事务是逻辑事务,而且物理事务和逻辑事务最大差别就在于事务传播行为,事务传播行为用于指定在多个事务方法间调用时,事务是如何在这些方法间传播的。下面以a.save()里调用了b.save()举例,事务方法之间调用时事务如何传播。@Servicepublic class A { @Autowired privat
2021-05-24 16:56:55
7418
1
转载 MyBatis中#{}和${}的区别详解 区别
区别#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.将传入的数据直接显示生成在sql中。如:orderby将传入的数据直接显示生成在sql中。如:orderbyuser_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为
2021-05-19 17:10:25
359
转载 Spring Boot 自动配置原理
文章目录原理Spring Boot的配置文件工作原理剖析@EnableAutoConfiguration自动配置生效总结原理Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文
2021-05-19 11:43:19
137
转载 redis 跳表
zsetzset是可排序的set。与hash的实现方式类似,如果元素个数不多且不大,就使用压缩列表ziplist来存储。不过由于zset包含了score的排序信息,所以在ziplist内部,是按照score排序递增来存储的。意味着每次插入数据都要移动之后的数据。跳表跳表(skiplist)是另一种实现dict的数据结构。跳表是对链表的一个增强。我们在使用链表的时候,即使元素的有序排列的,但如果要查找一个元素,也需要从头一个个查找下去,时间复杂度是O(N)。而跳表顾名思义,就是跳跃了一些元素,可以抽象多
2021-05-18 11:28:39
4406
转载 微服务开发之熔断器
一般在微服架构中,有一个组件角色叫熔断器。顾名思义,熔断器起的作用就是在特定的场景下关掉当前的通路,从而起到保护整个系统的效果。在微服务架构中,一般我们的独立服务是比较多的,每个独立服务之间划分责任边界,并通过约定协议接口来进行通信。当我们的调用链路复杂依赖多时,很可能会发生雪崩效应。假设有这么一个场景,有A, B, C, D四个独立服务,A会依赖B,C,D;当D发生负载过高或网络异常等导致响应过慢或超时时,很可能A会因此堆积过多的等待链接,从而导致A的状态也转为异常,后面依赖到A的其他服务跟着发生链式
2021-05-17 17:36:21
355
转载 使用crm系统优势
1、通讯中心CRM系统的通讯中心功能模块提供联系人分类管理、联系人分析、短信邮件群发等功能。帮助企业通过各种渠道、方式与客户取得联系,以便更好地与客户沟通;推测出联系人对业务的决策程度,促进及时跟进;个性化的邮件、短信,定期给联系人送去不一样的感受。CRM系统帮助 企业及时了解客户的需要以及提高客户的忠诚度。2、提高员工工作效率因客户关系管理而生的CRM系统可以帮助企业录入客户信息,当企业的客户数量达到一定的程度之后,员工要处理客户的信息,对不同的客户进行针对性的跟进时,可以使用CRM系统快速、精准的
2021-05-09 20:27:57
272
转载 Spring Boot Starters启动器
文章目录Starters是什么?Starters命名Starters分类1. Spring Boot应用类启动器2. Spring Boot生产启动器3. Spring Boot技术类启动器Starters是什么?Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。Starters
2021-05-07 09:55:27
488
转载 Spring循环依赖及解决方式
文章目录1. 什么是循环依赖?2. 怎么检测是否存在循环依赖3. Spring怎么解决循环依赖4.基于构造器的循环依赖5.基于setter属性的循环依赖6.结束语1. 什么是循环依赖?循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring中循环依赖场景有:(1)构造器的循环依赖(2)field属性的循环依赖
2021-05-04 18:28:47
638
转载 分布式ID
文章目录一、为什么要用分布式ID?1、什么是分布式ID?2、那么分布式ID需要满足那些条件?二、 分布式ID都有哪些生成方式?1、基于UUID优点缺点2、基于数据库自增ID优点缺点3、基于数据库集群模式优点缺点4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法(Snowflake)模式7、美团(Leaf)号段模式snowflake模式优点缺点双buffer优化总结一、为什么要用分布式ID?在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?1、什
2021-05-04 17:49:02
207
转载 Java并发之AQS详解
文章目录一、概述二、框架三、源码详解3.0 结点状态waitStatus3.1 acquire(int)3.1.1 tryAcquire(int)3.1.2 addWaiter(Node)3.1.2.1 enq(Node)3.1.3 acquireQueued(Node, int)3.1.3.1 shouldParkAfterFailedAcquire(Node, Node)3.1.3.2 parkAndCheckInterrupt()3.1.3.3 小结3.1.4 小结3.2 release(int)3.
2021-05-04 10:40:41
84
转载 CyclicBarrier 使用详解
文章目录1. CyclicBarrier 是什么?2. 怎么使用 CyclicBarrier2.1 构造方法2.2 重要方法2.3 基本使用2.3.1 需求2.3.2 代码实现3. CyclicBarrier 使用场景4. 原理5. CyclicBarrier 与 CountDownLatch 区别1. CyclicBarrier 是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像
2021-05-03 21:48:29
1222
转载 CountDownLatch的使用场景及原理
文章目录CountDownLatch的两种使用场景场景1 让多个线程等待:模拟并发,让并发线程一起执行场景2 让单个线程等待:多个线程(任务)完成后,进行汇总合并CountDownLatch 工作原理CountDownLatch与Thread.joinCountDownLatch与CyclicBarrierCountDownLatch的两种使用场景先来看看 CountDownLatch 的源码注释;/** * A synchronization aid that allows one or more
2021-05-03 20:47:49
932
转载 InheritableThreadLocal 实现原理
文章目录前言InheritableThreadLocal 概念InheritableThreadLocal 原理总结前言复习下 ThreadLocal 的原理,因为会对 InheritableThreadLocal 的理解 有重大的帮助:每个线程都有一个 ThreadLocalMap 类型的 threadLocals 属性。ThreadLocalMap 类相当于一个Map,key 是 ThreadLocal 本身,value 就是我们的值。当我们通过 threadLocal.set(new In
2021-05-02 21:45:30
517
转载 LockSupport 线程工具类
文章目录一、LockSupport简介1、LockSupport是什么2、与wait/notify对比二、源码分析(基于jdk1.8)1、park方法2、unpark三、LockSupport使用1、先interrupt再park2、先unpark再parkLockSupport是一个编程工具类,主要是为了阻塞和唤醒线程用的。使用它我们可以实现很多功能。一、LockSupport简介1、LockSupport是什么LockSupport是一个线程工具类,所有的方法都是静态方法,可以让线程在任意位置阻
2021-05-02 15:51:50
135
转载 Mysql order by优化,避免filesort
文章目录filesort优化使用索引排序1.select字段中只包含索引字段,避免包含无关字段。2.使用constant查询联合order by3.避免order by条件中一个desc 一个 ascfilesort当我们在MySQL执行计划中,遇到了Using filesort,这就证明MySQL在执行这条语句的时候用到了filesort,而没有使用我们的索引进行排序。所以就需要进行优化。具体filesort的过程如下:1、根据表的索引或者全表扫描,读取所有满足条件的记录。2、对与每一行,存储一
2021-05-02 15:23:36
1605
原创 Limit 分页查询优化
1)简单的查询分页;分每页5条 limit [offset],[rows]select t.* from t_topic t LIMIT 90000,10;对上面的mysql语句说明:limit 90000,10的意思扫描满足条件的90010行,扔掉前面的90000行,返回最后的10行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。2)建立id
2021-04-29 13:55:55
2067
转载 Activiti的乐观锁实现过程
文章目录背景activiti乐观锁的实现过程背景学习activiti的乐观锁实现过程,可以先理解complete工作过程在多个线程同时操作同一个taskId的时候,activiti是怎么解决并发问题的?过程activiti使用乐观锁(Optimistic Locking)做的并发控制一旦并发冲突(多个线程同时操作同一个taskId的时候)发生的时候,一个异常OptimisticLockingException就会被抛出来,同时事务也将回滚。检测到冲突发生的时候,其实是多个线程同时对同一个数据进行
2021-04-29 10:35:52
771
转载 Redis 分布式锁
文章目录什么是分布式锁实现锁的命令怎么释放锁代码实现分布式锁的缺陷客户端长时间阻塞导致锁失效问题Redis 服务器时钟漂移问题单点实例安全问题RedLock 算法结论什么是分布式锁说到 Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis 因为单进程、性能高的特点,它还经常被用于做分布式锁。锁我们都知道,在程序中的作用就是同步工具,保证共享资源在同一时刻只能被一个线程访问,Java 中的锁我们都很熟悉了,像synchronized 、Lock都是我们经常使用的,但是 Java 的锁只能
2021-04-22 18:27:09
182
转载 Rpc和Http的区别
相同点底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务。不同点速度来看,RPC要比http更快,虽然底层都是TCP,但是http协议的信息往往比较臃肿。难度来看,RPC实现较为复杂,http相对比较简单。灵活性来看,http更胜一筹,因为它不关心实现细节,跨平台、跨语言。使用场景如果对效率要求更高,并且开发过程使用统一的技术栈,那么用RPC还是不错的。如果需要更加灵活,跨语言、跨平台,显然http更合适RPC调用HTTP调用参考:https://zhu
2021-04-20 12:40:53
834
转载 Mysql的MVCC
文章目录版本链trx_idroll_pointerReadViewMVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。S
2021-04-20 12:37:00
100
转载 Spring中Bean的生命周期
文章目录1. 实例化Bean2. 设置对象属性(依赖注入)3. 注入Aware接口4. BeanPostProcessor5. InitializingBean与init-method6. DisposableBean和destroy-method7.各种接口方法分类对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收。而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制。Spring中每个Bean的生命周期如下:1. 实例化Bean对于BeanF
2021-04-17 22:04:43
215
转载 服务注册发现与注册中心对比(NACOS 和 ZK)
文章目录注册中心简介流程和原理基础流程核心功能注册中心特性对比zookeeper基础描述组件特点Nacos组件基础描述组件特点zk和nacos差异注册中心简介微服务架构中,注册中心是最核心的基础服务之一,注册中心可以看做是微服务架构中的通信中心,当一个服务去请求另一个服务时,通过注册中心可以获取该服务的状态,地址等核心信息。服务注册主要关系到三大角色:服务提供者、服务消费者、注册中心。流程和原理基础流程服务启动时,将自身的网络地址等信息注册到注册中心,注册中心记录服务注册数据。服务消费者从注
2021-04-12 21:49:59
4227
转载 Zookeeper工作原理(详细)
文章目录1、Zookeeper的角色2、Zookeeper 的读写机制3、Zookeeper 的保证4、Zookeeper节点数据操作流程5、Zookeeper leader 选举6、zxid7、Zookeeper工作原理8、数据一致性与paxos 算法9、Observer10、 为什么zookeeper集群的数目,一般为奇数个?12、Zookeeper 的节点1、Zookeeper的角色领导者(leader),负责进行投票的发起和决议,更新系统状态学习者(learner),包括跟随者(follow
2021-04-11 21:23:18
813
转载 分布式服务限流
文章目录本章目标自定义注解切面LimitInterceptor注解使用单机版中我们了解到 AtomicInteger、RateLimiter、Semaphore 这几种解决方案,但它们也仅仅是单机的解决手段,在集群环境下就透心凉了,后面又讲述了 Nginx 的限流手段,可它又属于网关层面的策略之一,并不能解决所有问题。例如供短信接口,你无法保证消费方是否会做好限流控制,所以自己在应用层实现限流还是很有必要的。本章目标利用 自定义注解、Spring Aop、Redis Cache 实现分布式限流自定义
2021-04-06 17:05:59
193
转载 执行监听器与任务监听器的基本使用
本文介绍执行监听器与任务监听器的基本原理和使用方法。当流程途径连线或者节点的时候,会触发对应的事件类型。执行监听器与任务监听器在生产中经常会用在几个方面:动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;当流程运行到某个节点时,发送邮件或短信给待办用户;统计流程处理时长,是否超时等;业务层面数据处理。任务监听器顾名思义是监听任务的。任务监听器的生命周期如下图所示,会经历assignment、create、complete、delete。当流程引擎触发这四种事件类
2021-04-06 15:58:12
2547
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人