自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (1)
  • 收藏
  • 关注

原创 【笔试题】括号生成

输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

2024-07-09 10:17:17 195

原创 数据存储与大数据相关技术栈脑图

技术栈

2023-02-02 16:10:56 203

原创 分库分表逻辑

分表规则:用户号ID % 分表数量 那么存储位置为:77 % 100 = 77。根据id进行分库分表,那么接下来想要操作这条数据,就应该在SQL上携带这个id。举例:分10库 100表,存储数据 id:77 name:Jack。分库规则:(用户号ID % 分表数量)/ 10 = 7。那么此条数据的存储位置:db_7,table_77。

2023-01-09 20:15:40 159

原创 hash 算法

hash 环的倾斜在极端情况下,仍然有可能引起系统的崩溃,为了解决这种数据倾斜问题,一致性哈希算法引入了虚拟节点机制,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点,一个实际物理节点可以对应多个虚拟节点,虚拟节点越多,hash环上的节点就越多,缓存被均匀分布的概率就越大,hash环倾斜所带来的影响就越小,同时数据定位算法不变,只是多了一步虚拟节点到实际节点的映射。根据“Hash”后的数字,对服务器列表进行取模运算,得到服务器的序号。hash 环的倾斜与虚拟节点。

2023-01-09 20:07:47 872

原创 QPS相关概念记录

但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时响应时间持续上升。计算型应用(耗CPU),线程数量就是CPU的核数,如搜索索引服务器,需要做大量的计算排序,非常耗CPU资源。是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

2022-12-29 13:55:31 781

原创 包装类型常用的常量池

对于Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据(实际上就是数组);Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or False。如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。以integer的源码为例:Short:Character:Boo

2022-12-03 15:09:25 231

原创 maven中dependencyManagement和dependencies的区别:

通常会在一个组织或者项目的最顶层的pom文件中看到dependencyManagement元素。使用dependencyManagement能让子项目引用一个以来而不用显示的列出版本号。maven工程会沿着父子层向上走,知道找到dependencyManagement,然后使用它指定的版本号,子模块继承之后,提供作用锁定版本+子模块不用写groupId和version。dependencyManagement只是声明依赖,并不实现引入,因此在子项目中需要显示的声明需要的依赖。...

2022-08-02 17:05:05 161

原创 zookeeper整合ElasticJob实现任务调度

需求导播台的自动连播任务。

2022-07-28 17:00:39 467

原创 类的初始化与实例化

瞎说的

2022-06-29 14:43:55 64

原创 单点登录SSO与JWT好文整理

sso:https://juejin.cn/post/7110537711294873630#heading-9JWT:https://blog.csdn.net/HD243608836/article/details/115732104

2022-06-23 15:43:05 132

原创 清理mysql表数据

https://funnylog.gitee.io/mysql45/13%E8%AE%B2%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A1%A8%E6%95%B0%E6%8D%AE%E5%88%A0%E6%8E%89%E4%B8%80%E5%8D%8A%EF%BC%8C%E8%A1%A8%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E4%B8%8D%E5%8F%98.html

2022-05-13 16:33:40 233

原创 Validator对象校验工具

通常在dubbo或者http接口中,需要对上游服务的参数请求进行判空等一系列校验,与其去对多个字段进行 StringUtils.isNotBlank() 这种判空操作,不如在请求的request dto中使用注解针对某个字段进行校验。推荐引入依赖 <!-- hibernate validator--> <dependency> <groupId>org.hibernate</groupId>

2022-04-25 14:06:07 408

原创 nested exception is java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFac

异常问题是加载不出dubbo依赖的接口原因是缺少依赖,之前在排除log4j依赖的时候不小心把它给注掉了: <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> </dependency>curator-recipes的作用是:...

2022-04-14 17:54:50 1073

原创 对象转换工具

maven依赖: <dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.5.2</version> </dependency>工具类:

2022-04-08 16:38:18 391

原创 dubbo同步调用说明

https://developer.aliyun.com/article/608811

2022-03-28 16:27:03 166

原创 dubbo路由规则

https://dubbo.apache.org/zh/docs/v2.7/user/examples/routing-rule/

2022-03-28 14:20:11 2140

原创 超级超级小的技巧总结

日常问题总结

2022-03-07 11:03:32 184

转载 JWT和OAuth2.0的理解

JWT无状态1. 识别用户的身份信息是由客户端自己去携带服务端不保存客户端请求的用户信息客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份2. 好处:客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务服务端的集群和状态对客户端透明服务端可以任意的迁移和伸缩减小服务端存储压力3. 无状态的实现无状态登录的流程:当客户端第一次请求服务时,服务端对用户进行信息认证(登录)认证通过,将用户信息进行加密形成token,返回给客户端,作为登录凭证以后每

2022-02-09 16:39:14 2413

原创 ThreadLocal

ThreadLocalThreadLocal是保存线程本地化对象的容器。只属于当前线程,对应用户请求的用户信息只属于当前用户请求。从名字我们就可以看到ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。ThreadLocal的坑 使用要注意的地方:ThreadLocalMap的问题由于ThreadLocalMa

2022-01-14 15:45:37 119

原创 2022的读书计划

专业书籍的阅读包括但不限于Java与Spring其他书籍1、《在细雨中呼喊》 余华

2022-01-11 14:10:08 229

原创 为什么需要泛型

使用泛型很好的避免了因类型转换而产生的ClassCastException。让程序有更好的可读性和安全性。用ArrayList举例子ArrayList<String> arrayList = new ArrayList<String>();1、代码有更好的可读性,一看就知道数组中包含的是String类型的对象。2、当get调用的时候,不需要类型转换,编译器就能返回值是String类型的对象,而不是Object。3、当add调用的时候,编译器还会检查,避免插入错误类型的对象

2022-01-11 12:01:31 207

原创 if与while的区别

public static void main(String[] args) { int i = 0;// if (i < 5) {// System.out.println("if---hi");// i++;// } while (i < 5) { System.out.println("while---hi"); i++;...

2022-01-10 18:40:37 232

原创 Arthas使用

安装终端安装//码云下载wget https://arthas.gitee.io/arthas-boot.jar运行//按1后回车java -jar arthas-boot.jar[arthas@1]$ 进入连接[arthas@1]$ stop断开连接运行时注意超时会断开链接,建立新连接前需要stop之前的连接,不然报错。命令trace [全路径方法名] :方法内部调用路径,并输出方法路径上的每个节点上耗时。watch [全路径方法名] :指定方法调用的输入

2022-01-07 11:31:42 798 1

原创 关于Spring实战(第4版)的读书笔记(Spring 4.x)

觉得哪里好玩写到哪里首先 Rod Johnson 感谢您!一、 介绍1、 Spring好处老生常谈的IoC和AOP:解耦简化开发,将对象的依赖关系给Spring控制;面向切面编程,像黑客一样控制某个类或者某个方法的执行。声明式事务:该事务是建立在AOP之上的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或加入一个事务,在执行完目标方法之后根据执行情况提交或回滚事务。spring注解:@EnableTransactionManagement。方便测试:非容器依赖与其他框架集成方便

2022-01-06 15:09:46 481

原创 IO与NIO的简单理解

一、NIO与IO对比记忆IONIO面向流面向缓存区阻塞IO非阻塞IO选择器面向流与面向缓存区面向流Java IO是面向流的,这意味着你一次从一个流中读取一个或多个字节。如何处理读取的字节由你决定。它们不会被缓存到任何地方。此外,不能操作在数据流中来回移动。如果需要在从流读取的数据中来回移动,则需要先将其缓存到缓冲区中。面向缓冲区Java NIO的面向缓冲区的方法略有不同。数据被读入一个缓冲区,然后从这个缓冲区中进行处理。您可以根据操作在缓冲区中来回移动

2021-12-31 15:49:14 1625

原创 使用ApplicationContext的getBeansOfType实现接口实现类的动态调用

需求设计一个分发系统,对视频或图文进行多种渠道的分发,发布渠道类型被设计成视频、图文、音频、短文本等,针对不同的发布内容,需要分发至不同的发布渠道,我们需要一个发布接口,并且这些不同的发布渠道需要实现这个发布接口,这就涉及到了接口实现类的动态调用。流程示意图:getBeansOfType方法可以根据接口类型返回相应的所有bean。<T> Map<String, T> getBeansOfType(@Nullable Class<T> var1) throws B

2021-12-27 20:11:08 4876 2

原创 自定义拦截器与一次请求的执行顺序

一、自定义拦截器1. 继承HandlerInterceptorAdapter类public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor { public HandlerInterceptorAdapter() { } public boolean preHandle(HttpServletRequest request, HttpServletResponse r

2021-12-27 13:59:08 628

原创 本地查询业务缓存

1、 注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface LocalCache { /** * 前缀 -- 缓存key * @return prefix */ String prefix();}2、切面@Aspect@Componentpublic class LocalCacheAspect { @

2021-12-25 17:56:00 204

原创 List的深拷贝和Map存储重复的键

list深拷贝浅拷贝注意:基本数据类型,不会被浅拷贝影响将list1复制到list2中,下面这几种方式都是浅拷贝,只是将list2的地址指向list1的地址,所以当list1发生变化时,list2也会被修改。addAll:list2.addAll(list1);add: for (ManageBo b : list1) { list2.add(b); }构造器直接复制:List<ChannelManageBo> list2 = new ArrayList<

2021-12-23 16:07:12 126

原创 Spring AOP切面

JoinPoint 和 ProceedingJoinPoint对比记忆代码示例 //直接进行包扫描,这个包下的所有方法会被切面当做切点处理 @Around("execution(* com.test.package..*.*(..))") public Object doAround(ProceedingJoinPoint call) throws Throwable { // 获取签名对象 MethodSignature signature = (Metho

2021-12-21 11:56:13 175

转载 GitHub搜索规范

in:name example 名字中有“example”in:readme example readme中有“example”in:description example 描述中有“example”stars:>1000forks:>1000pushed:2019-09-01 2019年9月1日后有更新的language:java 用Java编写的项目

2021-06-26 14:17:48 53

原创 AQS思想

2021-04-12 14:14:15 57

原创 Java反射

概念JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.以上的总结就是什么是反射反射就是把java类中的各种成分映射成一个个的Java对象实现反射:Class.forName(className

2021-02-19 19:31:15 149

原创 IO模型、多路复用

一、I/O 模型一个输入操作通常包括两个阶段:等待数据准备好从内核向进程复制数据Unix 有五种 I/O 模型:阻塞式 I/O BIO非阻塞式 I/O NIOI/O 复用(select 和 poll)信号驱动式 I/O(SIGIO)异步 I/O AIOBIO应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CP

2021-02-17 10:31:11 102

原创 Cookie与Session

CookieHTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 Cookie 来保存状态信息。Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。Cookie 曾一度用于客户端数据的存储,因为当时并没有其它合适的存储办法而作为唯一的存储手段

2021-02-16 20:40:06 97

原创 面向对象的设计原则

单一责任原则修改一个类的原因应该只有一个。换句话说就是让一个类只负责一件事,当这个类需要做过多事情的时候,就需要分解这个类。如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱这个类完成其它职责的能力。开放封闭原则类应该对扩展开放,对修改关闭。扩展就是添加新功能的意思,因此该原则要求在添加新功能时不需要修改代码。符合开闭原则最典型的设计模式是装饰者模式,它可以动态地将责任附加到对象上,而不用去修改类的代码。里氏替换原则子类对象必须能够替换掉所有父类对象。继承..

2021-02-15 11:22:09 71

原创 面向对象三大原则

封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改减轻维护的负担:可以更容易被程序员理解,并且在调试的时候可以不影响其他模块有效地调节性能:可以通过剖析来确定哪些模块影响了系统的性能提高软件的可重用性降低了构建大型系统的风险:即使整个系统

2021-02-15 11:18:29 1167 1

原创 观察者模式与发布/订阅模式

观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,生产者向频道发送一个消息之后,就不需要关心消费者何时去订阅这个消息,可以立即返回。...

2021-02-15 11:08:07 96

原创 缓存穿透、雪崩、一致性问题

穿透缓存中没有命中数据,直接到数据库中查询解决:对这些不存在的数据缓存一个空数据对这类请求进行过滤()布隆过滤器雪崩指的是由于数据没有被加载到缓存中,或者缓存数据在同一时间大面积失效(过期),又或者缓存服务器宕机,导致大量的请求都到达数据库。解决:为了防止缓存在同一时间大面积过期导致的缓存雪崩,可以通过观察用户行为,合理设置缓存过期时间来实现;为了防止缓存服务器宕机出现的缓存雪崩,可以使用分布式缓存,分布式缓存中每一个节点只缓存部分的数据,当某个节点宕机时可以保证其它节点的缓存仍然可用。

2021-02-15 11:07:05 82

原创 使用Redis和zookeeper实现分布式锁

RedisRedis分布式锁:加锁:/** * 获取锁 * @param lockKey 锁 * @param identity 身份标识(保证锁不会被其他人释放) * @param expireTime 锁的过期时间(单位:秒) * @return */public boolean lock(String lockKey, String identity, long expireTime){ boolean lockResult = redisTemplate.opsForValu

2021-02-15 10:39:33 119

hanlp-1.7.2-release

hanlp的最新jar包及配置文件。

2019-04-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除