- 博客(182)
- 资源 (2)
- 收藏
- 关注
原创 二分法查找 模板代码
二分查找。两遍二分,分别查找出左边界和右边界。模板 1:boolean check(int x) {}int search(int left, int right) { while (left < right) { int mid = (left + right) >> 1; if (check(mid)) { right = mid; } else { left = mid +
2022-04-06 10:30:21 6338
原创 字符串匹配算法
字符串匹配算法:BF 暴力匹配:O(m*n)RK 字符串 哈希匹配BM 右端开始匹配 坏字符和好后缀 计算移动最大值KMP 最长可匹配后缀子串和最长可匹配前缀子串对模式串预处理,生成next数组进入主循环,遍历主串2.1. 比较主串和模式串的字符2.2. 如果发现坏字符,查询next数组,得到匹配前缀所对应的最长可匹配前缀子串,移动模式串到对应位置2.3.如果当前字符匹配,继续循环// KMP算法主体逻辑。str是主串,pattern是模式串public static int k
2022-02-14 16:53:52 6053
原创 easyexcel 导出excel文件
easyexcel 引入: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version> </dependency>
2021-11-22 16:10:17 6718
原创 约瑟夫环问题
public class 约瑟夫环 { public static int[] answer(int m, int n){ Node head = new Node(1,null); Node temp = null; for (int i = 2; i <= m; i++) { temp = temp==null?head:temp; temp.next = new Node(i,null); temp=temp.next; }
2021-10-12 20:17:40 120
原创 一篇了解常用数据结构
1. 数组 Array[]下标访问 顺序遍历 不方便扩容2. 链表 LinkedList<>增删方便 不支持随机访问3. 队列 Queue 先进先出数组链表都可以实现4. 栈 stack 先进后出数组链表都可以实现5. 堆 heap 大顶堆 小顶堆树+数组6. 哈希表 hashmap哈希定位索引 底层数组+链表哈希冲突 处理 开放地址法 和 拉链法 next指针 头插法7. 树 tree进化:二叉树 > 平衡二叉树(AVL)> 红
2021-10-11 15:03:53 106
原创 mysql 改库名
CREATE DATABASE tech_baseline_marketing_auto_bus_01; -- 新库SELECT CONCAT('RENAME TABLE tech_baseline_marketing_auto_bus_00.',TABLE_NAME,' TO tech_baseline_marketing_auto_bus_01.',TABLE_NAME,';') DDLFROM information_schema.`TABLES`WHERE TAB..
2021-09-02 15:10:36 172
原创 spring boot 使用 caffeine 缓存
缓存依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>
2021-08-17 14:53:37 279
原创 SpringBoot 2.4.X 接入Jaeger
SpringBoot 2.4.X 接入,建议 springcloud 版本 2020.0.X,该版本支持 kafka 接入调用链步骤一:POM 文件中引入jaeger依赖<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId> <version>3
2021-08-16 11:17:26 1410
原创 jaeger对接内存溢出问题分析
通过dump文件分析,发现大量jaeger对象没能及时回收。用了线程池异步报价,新起的线程是没有trace的。 但是我们早期有个针对消息的优化,使用logback filter在没有trace的时会自动生成一个trace。 生成的trace使用MDC.put(“X-B3-TraceId”, traceId)存放在ThreadLocal,在使用线程池时,因线程不回收,导致trace一直不变。 而LogData对象使用了map保存trace,导致线程池里相同trace的日志越来越大,而且无法回收,.
2021-08-16 11:05:30 851
原创 Reddit 国外程序员酒后吐真言
职业发展的最好方法是换公司。技术栈不重要。技术领域有大约 10-20 条核心原则,重要的是这些原则,技术栈只是落实它们的方法。你如果不熟悉某个技术栈,不需要过度担心。工作和人际关系是两回事。有一些公司,我交到了好朋友,但是工作得并不开心;另一些公司,我没有与任何同事建立友谊,但是工作得很开心。我总是对经理实话实说。怕什么?他开除我?我会在两周内找到一份新工作。如果一家公司的工程师超过 100 人,它的期权可能在未来十年内变得很有价值。对于工程师人数很少的公司,期权一般都是毫无价值..
2021-08-04 10:34:36 238
原创 DNS 设置
首选备用阿里DNS223.5.5.5223.6.6.6腾讯DNS119.29.29.29182.254.116.116百度DNS180.76.76.76114 DNS114.114.114.114114.114.115.115清除系统DNS缓存ipconfig/flushdns查看正在使用的DNSnslookup
2021-07-30 14:02:46 277
原创 现金计算 AmountUtil
/** * * @author qsh * */public abstract class AmountUtil { private AmountUtil() { } /** * 加法运算 * * @param v1 * @param v2 * @return */ public static double add(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toStri
2021-07-02 11:05:53 241
原创 配置Ons
/** * 本类是配置Ons * * @author * @created */@Configuration@ConditionalOnClass(ONSFactory.class)@ConditionalOnExpression("${" + OnsProperties.PREFIX + ".enabled:false}")@EnableConfigurationProperties({ OnsProperties.class })public class OnsAutoConfi
2021-07-02 11:05:21 6352 1
原创 SpringBoot @EnableAsync 线程池配置 实现AsyncConfigurer接口方法
import java.lang.reflect.Method;import java.util.concurrent.Executor;import java.util.concurrent.ThreadPoolExecutor;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;impor
2021-07-02 10:44:36 810
原创 CacheKeyGenerator
import java.lang.reflect.Array;import java.lang.reflect.Method;import java.math.BigDecimal;import java.nio.charset.Charset;import org.springframework.cache.interceptor.KeyGenerator;import org.springframework.util.ClassUtils;import com.google.common
2021-07-01 19:31:08 590
原创 加签/验签工具类SignUtil
import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import java.util.TreeMap;import org.apache.commons.codec.digest.DigestUtils
2021-07-01 19:24:16 1919
原创 NioUtils
import org.apache.commons.lang3.ArrayUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;
2021-07-01 19:20:24 215
原创 LruCacheUtils
import java.util.LinkedHashMap;import java.util.Map;import java.util.Map.Entry;/** * Cache保存一个强引用来限制内容数量, 每当Item被访问的时候, 此Item就会移动到队列的头部. 当cache已满的时候加入新的item时, 在队列尾部的item会被回收 * <p> * 如果cache的某个值需要明确释放, 重写{@link #entryRemoved} * <p> * 如果
2021-07-01 19:13:08 199
原创 分布式定时任务 jobkeeper
/** * 初始化调度器 * * @return */ @Bean public TaskScheduler poolScheduler() { //使用ZK-LeaderElector ScheduledProperties.ZKLeaderElector zkLeaderElector = properties.getLeaderElector(); //配置zkLeaderElecto则使用Z.
2021-07-01 19:11:26 220
原创 JAVA 四中引用类型
强引用(StrongReference)在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JVM也不会回收。因此强引用是造成Java内存泄漏的主要原因之一。String str = new String(“abc”);软引用(SoftReference)软引用需要用SoftReference类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回
2021-05-08 22:33:27 109
原创 分布式缓存
缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。一般有三种处理办法:一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。为key设置不同的缓存失效时间。缓存穿透缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导
2021-05-08 22:08:46 116
原创 利用 Spring 中的事件监听机制也可以轻松实现观察者模式
利用 Spring 中的事件监听机制也可以轻松实现观察者模式,观察目标也不需要维护观察者列表了,相当于发布-订阅模式,它们之间是完全解耦的,但每个观察者需要创建一个 Bean。观察者配置代码:import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Slf4j@Co
2021-05-08 14:36:14 182
原创 Spring Bean生命周期
Spring Bean生命周期比较复杂,可以分为创建和销毁两个过程。首先,创建Bean会经过一系列的步骤,主要包括:实例化Bean对象。设置Bean属性。如果我们通过各种Aware接口声明了依赖关系,则会注入Bean对容器基础设施层面的依赖。具体包括BeanNameAware、BeanFactoryAware和ApplicationContextAware,分别会注入Bean ID、Bean Factory或者ApplicationContext。调用BeanPostProcess
2021-05-07 15:32:05 98
原创 ReentrantLock和synchronized
ReentrantLock是Lock的实现类,是一个互斥的同步器,在多线程高竞争条件下,ReentrantLock比synchronized有更加优异的性能表现。1 用法比较Lock使用起来比较灵活,但是必须有释放锁的配合动作Lock必须手动获取与释放锁,而synchronized不需要手动释放和开启锁Lock只适用于代码块锁,而synchronized可用于修饰方法、代码块等2 特性比较ReentrantLock的优势体现在:具备尝试非阻塞地获取锁的特性:当前线程尝试获取锁,如果这一时刻锁没
2021-05-07 15:17:40 541
原创 死锁
避免死锁:参考银行家算法 顺序获取多个锁 A->B获取锁 设置超时机制过静态代码分析(如FindBugs)去查找死锁死锁代码:public class DeadLockSample extends Thread { private String frs; private String second; public DeadLockSample(String name, String frs, String second) { super(name); th
2021-05-07 14:54:46 102
原创 首字母大写
需要进行首字母大写改写,网上大家的思路基本一致,就是将首字母截取,转化成大写然后再串上后面的,类似如下代码 //首字母大写 public static String captureName(String name) { name = name.substring(0, 1).toUpperCase() + name.substring(1);
2021-05-07 11:38:49 208
原创 一些基础问题
面向对象的特征 抽象 多态 继承final, finally, finalize 的区别int 和 Integer 有什么区别 int 包装类 Integer int i = Intager null?重载和重写的区别抽象类和接口有什么区别 接口是特殊的抽象说说反射的用途及实现说说自定义注解的场景及实现HTTP 请求的 GET 与 POST 方式的区别session 与 cookie 区别session 分布式处理JDBC 流程..
2021-05-07 11:36:16 97
原创 Java序列化Long类型数据到前端数据越界
Java序列化Long类型数据到前端数据失真现象项目中用到了唯一ID生成器.生成出的ID是long型的(比如说4616189619433466044).通过某个rest接口中返回json数据后,发现浏览器解析完变成了4616189619433466000.原因大致描述:java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).解决方法方法就是不用number来保存long值,而是使用string.可以在客户端js修改,也可以在服务端序列化的时
2021-05-07 11:33:11 554
原创 Java导出CSV文件 window下excel打开 乱码
window下utf8编码跟Linux下不同 需要在文件头写入BOM头//BOM的UTF-8 头 防止Excel打开乱码byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};看代码:CsvExport 工具类代码:public class CsvExport {private static final String SPLIT_LINE_SEPARATOR = "\n";private List<String> headList;p
2021-05-07 11:31:13 279
原创 @Size、@Length、@Max、@Min注解的含义和区别
@Min 验证 Number 和 String 对象是否大等于指定的值@Max 验证 Number 和 String 对象是否小等于指定的值@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内@Length(min=, max=) 验证字符串长度是否在给定的范围之内max和min是对你填的“数字”是否大于或小于指定值,这个“数字”可以是number或者string类型。长度限制用length。...
2021-04-29 20:39:57 118310 4
原创 知乎关于王阳明心学的高赞答案。
为了让一些把心学当成唯心的、有误解的人能停下来先放下误解,我改写了之前的开头,直接进入正题。任何人都能看懂,不管了解不了解心学;任何人都能用得上。哪怕消除一下知行合一是知道了就去做这种误解也好,然而本文的作用绝对比这个要大。“不虑而知为良知”。所谓“不虑而知”,不加思索就知道的。什么是不加思索就知道的?就是朗朗坐在他的钢琴前,是乒乓球运动员握着球拍的时候。王阳明是朗朗,心学是他的钢琴,你想要像他一样,是要去实践去做的,这不是有些人误解的唯心,否则老王上哪儿立功立德立言成圣,不是应该成仙吗?也不是有些
2020-10-29 19:33:03 1449 1
原创 mysql 索引使用分析
EXPLAINSELECT *FROM backend_blacklistWHERE is_deleted = 'N'and phone = '15200000012' and is_yx = 'Y'type字段分析(ref):type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > uniq
2020-10-23 17:11:44 139
原创 正则提取单引号里面的内容 判断是否是JSON
sql修改数据库里面的json字段 判断json内容是否符合格式: public static void main(String[] args) throws Exception { String a = "\\'\\S*\\'";//正则 Pattern p = Pattern.compile(a); BufferedReader br = new BufferedReader(new FileReader("D:\\config.sql")); String lin
2020-10-19 17:50:52 368
原创 Java 日期 calendar中 DATE 和 DAY_OF_MONTH 和 DAY_OF_YEAR
calendar中 DATE 和 DAY_OF_MONTH 和 DAY_OF_YEAR这几个字段名字起得确实有点。。其中 DATE 和 DAY_OF_MONTH 都是 5当前日期减去一天: public static void main(String[] args) { out(Calendar.DATE); out(Calendar.DAY_OF_MONTH); out(Calendar.DAY_OF_YEAR); } public static void out
2020-10-12 17:33:19 7551
原创 sql 军规
一、基础规范表存储引擎必须使用InnoDB表字符集默认使用utf8,必要时候使用utf8mb4解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它禁止使用存储过程,视图,触发器,Event解读:(1)对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情,不要交到数据库层(2)调试,排错,迁移都比较困难,扩展性较差禁止在数据库中存储大文件,例如照片,可以将大文件存储在对象存储系统,数据库中存
2020-10-12 15:12:01 736 1
原创 判断cron表达式 是否包含今天(生产任务重复运行定位)
判断cron表达式 是否包含今天 判断cron表达式 是否包含今天判断cron表达式 是否包含今天 CronExpression exp = new CronExpression("43 59 18 ? * 6 *"); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); Date nextValidTime = exp.getNextValidTimeAf
2020-10-09 13:04:04 1080
原创 awk教程
日志字段提取:-F ‘:’ 冒号是分割符‘条件 动作’条件 /正则/动作判断 if else print打印 $NR (number row 缩写 总共分割数)
2020-09-16 16:28:44 97
原创 软件架构随思
奥姆剃刀:如无必要勿增实体金字塔原理:道生一,一生二,二生三,三生万物软件的架构:软件的架构演进 类似 公司组织架构的演进从开始的几人分工到功能职责高度抽象的部门组织管理者只会对下层抽象单元发布指令而不关心其具体实现当然你也会发下大多数公司在不断的调整组织架构或者直接重构系统...
2020-07-21 15:46:56 92
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人