笔记
csu__wind
很多知识看完就忘,写下来加强记忆。
展开
-
不常见的正则表达式规则
最近业务有个需求,要用正则表达式。具体做法是:模板内容:template co{nten}t de{mo} one要求:匹配出所有{}中的内容。先说结论表达式:(?<=\{)(.+?)(?=\})其中有几个比较有意思的点:1、(?<=exp),表示匹配exp开头的内容2、(?=exp)表示匹配exp结尾的内容3、.+?表示非贪心匹配。其中第3点较常规,是贪心与非贪心的区别。正则表达式默认贪心。举例如果不加“?”,以上模板可能匹配出"nten}t de{mo"内容,加上"?"后可正原创 2022-04-14 11:46:59 · 132 阅读 · 0 评论 -
refreshToken的作用讨论及几点疑惑
在网上及oauth官方网文档转了一圈,看到如下理由:refreshToken的作用:1、更加安全。直接接给access_token较长时间的有效期,有泄露风险,所以引用refresh_token,有效期长,但权限小。2、类似session的检验方式,会在用户每次访问的时候刷新access_token的过期时间。此方案会有较大性能问题,有高频率无用刷新,尤其在请求频繁的时候。此时refresh_token的作用相当于降低了access_token的刷新频率。3、在利用第三方登录,如微信登录、googl原创 2022-01-28 17:37:58 · 10218 阅读 · 4 评论 -
分布式事务概述
定义:在分布式系统上,保障不同服务的事务的原子性。即同时成功或失败解决方案:1、两阶段提交(Two-phase Commit,2PC)。引入“第三方”,协调各事务参与者进行如下动作:首先大家分别走99步,成功了?ok,那大家再一起走最后一步。根据经验最后一步都能成功。2、补偿性事务(try,cofirm,commit, TCC)事务有三个参与者,ABC三个服务。A执行完B执行,B执行完C执行。如果C执行失败,则进行重试和补偿。如果重试后依旧失败,则调用B、A的回滚方法统一回滚3、本地消息原创 2022-01-07 11:54:42 · 352 阅读 · 0 评论 -
数据库设计坏味道
数据库设计坏味道:之前讨论了代码中的坏味道,这个很多人讲过,也比较常见。本文讨论的是数据库设计中的坏味道。很多人会忽略数据库设计中的坏味道,而实际上我个人经验而言,不好的数据库结构,会造成灾难性的后果,比不合理的代码的危害程度高很多。因为在业务运行以后,数据库的修改成本非常高,会出现修修补补的情况,以至于屎山越堆越高。常见的数据库坏味道:大宽表开玩笑讲,如果可以,我能用一张表搞定一个业务,当然是不行的。但有时候也不需要完全按三范式拆分得特别零散,那怎样判断呢?我个人的经验是:如果模型A与模型B是原创 2021-09-23 11:35:06 · 150 阅读 · 0 评论 -
代码中的坏味道
坏味道这个词,第一次听到还是华为的同事,一听到就能直觉感受,来自于英文中的badsmell,想了一下中文确实没什么确切的词与之对应。就叫坏味道吧。最近面试几个候选人,统一口径为了更好的发展,为了带团队考虑跳槽。可以理解。但当你带领一个团队的时候,不论是三五人的小组,还是十几人几十人的部门,质量管控、代码reivew都是必不可少的环节,否则管控就无从谈起,更不要讲带领团队进行整体的技术能力提升。无法识别成员项目中的问题,就不存在review.**本文旨在讨论,常见的坏味道都哪些?**什么是坏味道?原创 2021-09-23 10:54:22 · 799 阅读 · 0 评论 -
springboot网站首页
最近有个朋友,咨询我一个问题。希望在springboot中可以实现域名访问首页。不借助nginx,使用springboot自带tomcat。我当然不能放弃这个显摆(装X)的机会。经搜索现有网上流行的方式有两种:1、在resource目录下,放index.html,然后自建controller,实现path为"/"的请求响应,并return “forward:index.html”@Controller@RequestMapping("/")public class IndexController原创 2021-07-15 10:35:36 · 675 阅读 · 0 评论 -
记一次jvm内存优化
内存优化是老话题了。此次优化历时2周,克服几个没遇到过的问题,也算最后得到了解决。现复原一下过程:1、运维发现服务断了,经查看java进程被kill2、查询linux日志(whereis message),默认为message文件,发现java进程被kill,日志内容为:out of memory: Kill process 9136 (mysqld) score 409 or sacrifice child (此条日志为mysql被kill ,生产实际为java)3、网上方案很多,其中一条为降低进程原创 2021-06-10 17:51:54 · 200 阅读 · 3 评论 -
metaspace概述(与compressedClassPointer的关系)
什么是metaspace:在java8中,metaspace是方法区的实现。java7中对应的实现是永久代。方法区是jvm规范,即所有jvm的具体实现都需要实现相应的分区什么是compressedClassPointer?系统从32位增加到64位,jvm技术中用于定位class 和object的node也增加到了64位。为了增加内存利用率,objcet中指向Klass的指针使用32位,即压缩技术(细节请自行百度),metaspace的大小:metaspace大小限制:在启动参数中,M原创 2021-06-08 14:18:38 · 484 阅读 · 0 评论 -
云原生 阿里 serverless helloworld
1、创建maven工程(简单工程)2、引入阿里依赖 <dependency> <groupId>com.aliyun.fc.runtime</groupId> <artifactId>fc-java-core</artifactId> <version>1.4.0</version> </dependency>3、新建一个helloworld类,并实原创 2021-04-19 15:15:20 · 77 阅读 · 0 评论 -
多线程编程笔记2--线程安全的解药:锁
前一篇提到,多线程会有线程安全问题。而解决这个问题的方案,就是本文要讲的:锁线程安全中最常见的aba问题,其本质原因在于不同的线程对同一个资源有争抢行为,那么自然而然,解决这个问题的方式,就是限制资源的访问权限,对于更新操作,同一时间只允许一个线程访问,就解决了这个问题。锁的本质:通过一定的方式,限制某些资源、代码的访问权限,从而实现程序运行结果的一致性、可预测性具体:volatile:只能用于变量,内存可见,通过CPU的lock指令,强制变量不在线程缓存中存储,并在写入值时强制无效多核c原创 2021-03-30 11:51:36 · 92 阅读 · 0 评论 -
多线程编程笔记1--线程安全的本质
何为线程安全?我们对一个逻辑进行操作N次,无论串行操作还是并行操作,得到的结果都一样,那么我们称之为线程安全的逻辑。此处可以类比幂等:一个操作进行1次或者重复执行N次,如果得到的结果相同,此操作就是幂等的,反之则不是幂等操作。为什么会线程不安全?牵涉到jvm的内存分配模型。如以下代码: public int addOne(int i){ return i+1; }我们定义一个变量int a,然后多线程调用a,并用addOne方法对a进行增加操作100次。此时有一个关键问题:*原创 2021-03-24 13:55:39 · 116 阅读 · 2 评论 -
如何优雅地进行配置参数读取(配置文件参数统一管理调用)
在开发的时候,我们会根据不同的环境,配置不同的对数。这些参数通常存在于application-param.yml中(其它文件也适用)。要求:如我们建一个类Params来统一存储配置参数,希望能以Params.paraA形式来调用相关参数难点:静态成员不能使用注解注入(原因为静态成员加载顺序问题,可以复习下)解决方案:在Params类中声明一个方法,这个方法在应用启动完成后自动执行,然后在方法中对参数初始值进行赋值。...原创 2021-03-02 09:35:22 · 459 阅读 · 0 评论 -
Criteria 多个or怎么处理?
看源码可知:example、oredCritera、criteria的关系如果我们要从mysql中查询id为1000或2000的用户。可以用以下写法:UserExample userExample=new UserExample();UserExample userExampleTemp=new UserExample();UserExample.Criteria criteriaFirst = userExample.createCriteria().andUserIdEquals(1000);原创 2021-02-26 09:23:07 · 2882 阅读 · 0 评论