自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 资源 (2)
  • 收藏
  • 关注

原创 zookeeper实现分布式锁Demo

分布式锁的产生原因,单服务集群或者分布式开发的环境下,多个JVM无法进行锁操作。实现方式又Redis 或者zookeeper。实现原理:在zookeeper上创建临时节点,因为只有一个系统可以创建成功,创建不成功的话会报不存在的错误。当一个拿到锁得系统执行完之后,.close()方法。即关闭临时节点。其它线程可以创建即拿到锁。这个过程利用事件通知zookeeper的handleDataDeleted当节点删除时触发事件,可以用于通知其它线程拿锁。Redis和zk实现分布式锁的区别:Redis是n..

2021-07-13 10:12:12 205

原创 ConcurrentHashMap1.7源码详细解读

1.首先看构造函数public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);}其中

2021-06-10 17:02:06 186

原创 谷歌建议框架 EventBus 理解源码

写这个建议框架为了便于观察者模式:一 ,实现第一个类import com.google.common.base.Preconditions;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 观察者综合类 */public class ObserverAction { private Object target;//表示观察者的类 priva

2021-02-02 14:11:52 156

原创 byte[]转换成压缩流

1.当我们拿到一个文件之后,我们会把它压缩然后压缩,然后读取流。这样中间会有很多次落地成文件很不方便。有一个简单的办法如下方法。别人拿到这个压缩后的byte[] 可以之间转换成zip的压缩文件。/** * 源流 转换成ZIP流 * * @param sourceData * @return byte[] */public byte[] getZipByte(byte[] sourceData, String name) { ByteArrayOutputStream bos =

2021-01-22 09:07:19 1326

原创 程序员社招面试,从行为,人性的角度分析如何面试。

我想每个人都多多少少遇到很心酸的面试经历吧,从小白的时候面试,满怀期待的去了,面试完了发现是培训机构,说你这个水平不行啊,我们公司培训你一下....。工作了1,2年感觉有经验了,去面试好几个问题没答上来,好点的说一句啊,今天到这里吧。不好的直接开启人生导师模式....我今天写的这篇文章目的是,不是告诉你面试背题,刷题,什么jvm原理,hashMap原理,而是从另一个方面告诉你该如何面试。假如有下边这样一个场景,程序员A,程序员B面试同一个职位,假如面试官问了一道题,A程序员正好在做地铁.

2020-05-29 13:41:05 721 3

原创 大小顶锥动态求解中位数以及如何动态求解TopK

有这样一个问题,一个有序数组(从大到小) 长度为13 中位数为 18int arr[] = new int[]{1, 3, 5, 6, 11, 14, 18, 21, 27, 29, 31, 56, 59}但是我们这个数组是动态的,每次都插入一个数据,这样没插入依次中位数就要破环,而且还要每次排序,这样会很慢。我们思路是这样维护一个大小,顶堆。大顶堆:堆顶元素是整个集合中最大的元素,同理 小顶堆是整个集合最小的元素。这里 我们采用数组形式实现顶锥(另一种实现方式是链表形式)...

2020-05-24 14:14:16 460

原创 Redis以二进制形式存储对象

代码已测试 直接测试就可以 ,注意 实体类一定要 实现 Serializable 接口 不然会报错import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import javax.annotation.Resource;i...

2020-01-15 17:01:34 6232

原创 外包和直招的区别,谁能学到东西

你有没有自己思考过一个问题,外包和直招的本质区别,为什么会存在外包,你可能会想,很简单啊活多人少,多找几个外包人员.找过工作的人都知道遇到外包的岗位,多是一些公司在社会上临时找的,然后安排你去甲方公司面试,首先你跟本不是这家公司的员工,只是你发了个简历他联系到你,然后派你去甲方公司面试对不对.稍有点杠精的人就会问为什么,甲方公司不自己面试你,非要中间倒这么一手,关键你不也是社会上找工作的吗,又...

2019-07-03 15:12:06 12441

原创 手写一个民用Tomcat (07)

照样能把value=jxd 取出来 这样 一个数组 就能完成了,虽然data 原数组被改变 这样看似不太好但是,但是节省空间 不然你就要2个数组才能完成,一个取值一个。* ,当我们遇到第一个=的时候 下一个是value=jxd 那么之前那个key(name) 就没有用了,因为已经赋值到map里边了 ,所以读取。* ox 是一个查找指针 ,当遇到 = 或者&时候,进行取舍,=前边表示key ,& 前边表示value 如果没有& 表示结尾。//因为post 请求又是会带sessionid。

2024-04-23 13:51:26 339

原创 手写一个民用Tomcat (06)

照样能把value=jxd 取出来 这样 一个数组 就能完成了,虽然data 原数组被改变 这样看似不太好但是,但是节省空间 不然你就要2个数组才能完成,一个取值一个。* ,当我们遇到第一个=的时候 下一个是value=jxd 那么之前那个key(name) 就没有用了,因为已经赋值到map里边了 ,所以读取。* ox 是一个查找指针 ,当遇到 = 或者&时候,进行取舍,=前边表示key ,& 前边表示value 如果没有& 表示结尾。//由上面的URLClassLoader加载这个servlet。

2024-04-18 10:21:53 861

原创 大于,小于,小于等于,大于等于,获取数据范围的小工具

还有15.4以上的档位,要在动态的筛选出其中一条数据,传入的值是 compareValue 10.4 因为我们后来会需要很多条件,如果用mysql 语句 每次增加新的判断条件 会要引入两个字段进行 判断,如果增肌4个条件就要增加8个字段。//isSatisfied 默认fasle ,第一个条件如果成立,则返回true,继续判断第二个条件。例如(0,10],(10,20)表示 大于0 小于等于10,大于10 小于20的数据。再开发中我们经常 遇到 大于, 小于,小于等于,大于等于四种组合的工具。

2024-04-17 10:22:55 490

原创 手写一个民用Tomcat (05)

继续我们这次的优化,上次是request, 这次是response,同时request,response 针对 引入门面模式,把负责的逻辑隐藏起来,展示一个 好的好的门面给servlet。没什么难点,主要就是引入门面模式进行整理,之前都暴露着各种方法,用户在使用的时候会看到,同时 也避免 被更改 和强转的风险。//由上面的URLClassLoader加载这个servlet。//首先根据uri最后一个/号来定位,后面的字符串认为是servlet名字。//headers是一个保存头信息的map。

2024-04-16 16:50:07 830

原创 手写一个民用Tomcat (04)

我们这一版就要是把所需要的数据 取出来,放到map 集合里边,先看第一个 我们能获取 请求方式GET, 请求路径 以及 请求协议 HTTP/1.1 然后 空一行, 获取到 请求头。if (i == (end - 1)) { //每个字符都相等,则匹配上了,返回开始位置。//解析第二段uri,以空格结束 解析出/servlet/com.yixin.HelloWorldServlet。//pos是查找字符串buf在uri[]中的开始位置。//如果后边都没有了,依旧没有查到 难就查不到了。

2024-04-14 14:04:30 1196

原创 手写一个民用Tomcat (03)

这就是 形成了一套 运行 机制,我通知你干活,你干完活之后 告诉我 ,我们在02那篇文章的时候是这样的,JxdHttpConnector 领导一直紧跟着JxdHttpProcessor 员工,直到员工干完活,一个领导盯着一个员工很累的,现在是 这个领导 统一指挥一个 团队,员工自己干完活之后反馈给领导。JxdHttpConnector引入一个队列池,每接到一个请求,就冲队列池中取出来,执行这个请求,执行完之后再放回队列池中,继续等待下一个处理。// 回收processor,员工归队。

2024-04-09 11:11:25 995

原创 手写一个民用Tomcat (02)

System.out.println("进入>>>>>>HelloWorldServlet.service方法");//由上面的URLClassLoader加载这个servlet。//首先根据uri最后一个/号来定位,后面的字符串认为是servlet名字。//交给HttpProcessor 处理。//获取PrintWriter。//根据HTTP协议响应头定义,里面包含变量。// service(),由它来写动态内容到响应体。//创建servlet新实例,然后调用。//生成响应头,填充变量值。

2024-04-07 10:51:54 1023

原创 0基础如何进入IT行业?

学习了JAVA 之后 你先工作一段时间 ,你自己就会慢慢探索其他方向的,先不还要考虑太多,那些都不是这个阶段考虑的,假设你现在找到一个靠谱的学习班了,那么你需要先试着,自学一下JAVA, 什么不会咋办, 那就 一点点抄写代码,从最简单的开始,比如计算 一个等差数列,打印一个hello world ,对就是 访者 别人的代码 一点点再电脑上打出来,然后运行。其次就是,一定多学习一下框架使用,比如的Spring,mvc,SpringCloud,redis ,数据库 就学会mysql 就行 ,

2024-04-07 10:37:04 297

原创 手写一个民用Tomcat (01)

我对接口的理解是 一种规范,我在开发的时候突然有点感悟,就是你开发一套系统,或者写一个小的业务,在你使用我这个系统、业务的时候,你要 遵守我的规范,怎么解释规范呢,就是用接口去理解。System.out.println("进入>>>>>>HelloWorldServlet.service方法");上面是一个静态资源 else 如果不关注的话 可以不看注释掉,我这边是获取D盘下边的 txt 文件 相应的页面上,没啥 东西。//首先根据uri最后一个/号来定位,后面的字符串认为是servlet名字。

2024-04-05 17:41:48 1047

原创 浅显易懂的简单说一下jvm内存模型

这里注意下,有一个问题,就是循环引用,你想啊 有两对象 相互引用对方 ,这两对象永远没有被使用了,但是还相互指向对方, 那是不是 永远不会被清除掉,这就是GC Root解决的问题, 可达性分析算法 ,原理就是一路追踪到最后, 看看到底最终的哪一个对象,有没有被人使用,最终没有被使用 那么整个一条链路 就没有存在的意义。GC回收对象,有的对象被经常用到,有的呢没有被经常用到,这些经常用的对象 要是反复被创建是不是非常麻烦,举个生活中的例子,你整理一间屋子 是不是经常用到的东西会放到显眼,而且好拿的位置。

2024-04-02 16:25:43 752

原创 实现一个Google身份验证代替短信验证

System.out.println("拿到这个字符串 二维码工具:去生成二维码图片就可以了" + getQrCodeText(secretKeyBase32, "jxd", "hdjz"));咱们国内是用手机短信做验证,当然 这个google身份验证只是一个辅助验证登陆方式。谷歌身份验证器,我本身是一个基于时间做加密计算然后得出相同结果 本身很简单。详细的可以百度一下搜索原理,我们这里只是介绍一下使用。* @param secretKey 密钥。* @param secret 密钥。

2024-03-29 13:59:28 848

原创 最近接到一个大项目,给公司设计抢商品代金劵业务

我们系统上线之后,咋说呢 还是有问题,具体过程心酸~,后来我们该用预约方法(这样可以提前预知多少数据请求),因为我们公司业务较特殊,很多客户和业务员让他们预约的话,有些繁琐,具体细节不赘述了。而epoll 多了一个回调,主动通知,但是呢 不是主动通知你,而是主动放到一个完成队列里边去 ,就是完成的都放到一起,你自己处理。举一个例子,比如你干一件事,这件事中有很多过程,你时间上无法控制的,比如你去买星巴克咖啡,下完单之后他给你制作,你不会在哪里等,你跑到卖炸鸡的那边 再买炸鸡。这样可以支持很高的。

2024-03-18 14:05:07 1010

原创 关于大文件上传,压缩的java操作

java sftp 注意的问题

2023-07-18 14:31:56 1055

原创 分享一种实用redis原子锁的方式

实用redis 分布式锁

2023-03-01 16:05:19 713

原创 集群方式下的java Redis锁 lua脚本

redis集群方式原子锁,lua脚本

2023-03-01 15:53:13 507

原创 .p12 证书过期时间查询

证书过期时间

2023-01-09 15:25:24 2093

原创 如何不落地文件使用压缩流ZipOutputStream的一些操作

Java 文件压缩方面的知识

2022-07-08 14:08:41 1573

原创 有趣的链式调用

今天在公司接收一个其他人做的项目,发现一个有趣的链式调用。先看下这个链的chou'xianpublic abstract class AbstractHandler { protected String uuid; protected String code; protected String logMessagePrefix; protected String logMessageFormat = "[%s]-[%s-%s]-[接口%s]-[%s]--

2022-03-28 09:47:22 154

原创 MySql行级锁的一些实用小思考

mysql的引擎是InnoDB你有没有遇到过这种场景, 你有一个收款表, 表里边有一个余额字段 , 然后 这个余额字段 频繁的update,我们假设很多人往你余额里边充钱, 当然也有很多人在你这里取钱,也就是说这行余额不断的加减运算,不断的更新。那么 高并发下 会锁表 是不是会非常慢(你这一行属于是典型的热点行数据) 那么我们怎么提高 并发能力呢。先说一个比较好的办法,就是 你把这个余额 分成好几行,然后 让每个往里存钱的 或者取钱的事务 随机访问 余额行就可以,这样就能提高并发能力, 比较好的做.

2022-03-04 14:52:25 532

原创 数据库建立索引要考虑回表问题

这个文章我们略过很复杂的技术细节,直接告诉你怎么用,如果你有兴趣可以自己查下资料学习。毕竟知识只有自己总结过的才是自己的。注:我们讨论的是你的数据库引擎是InnoDB什么是回表:看下边的sql,其中表user 且name 建立索引select * from user where name='张三';这条sql 语句因为name 建立了 索引,索叶子节点是保存的主键id(你可以这样理解就是索引下边挂着注主键),然后 拿到主键id之后 在查询user 所有信息。注意这里 拿索引下边的

2022-03-03 16:35:03 498

原创 关于流的关闭方式自动方式写法

大家先看下这个方法 try catch 后边final 还要 里边继续try catch 关闭流:public static byte[] obj2byte(Object obj) { if (obj == null) return null; byte[] ret = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; tr.

2022-02-22 10:23:57 802 1

原创 最新的XXL_JOB正确使用

springboot 整合xxljob 首先你需要启动一个xxl_job的管理中心 就这这个页面。一般公司都会给你配置好你的项目如何整合:在spring boot的配置文件中加上如下配置,注意 1:admin.addresses 就是你xxljob的管理页面地址。2: 下边这个端口号 自己写一个9097,这个端口号就是 你执行器的端口号,一会要配置到管理页面上 zhxxl: job: admin: addresses: http://localhost:8.

2022-01-05 15:48:07 3854

原创 注意Mybatis-Plus IN操作数组的时候不能使用基本数据类型。

看下这个操作 如果你 status 接收到的是一个int[]数组 ,Java 基本数据类型你实际上是查不到数据的public List<Test> queryByOrderNoAndStatus(String orderNo, int... status) { wrapper.eq("order_no", orderNo).in(status != null, "status", status); List<Test> testList= mapper.sele.

2021-12-09 19:36:18 687 1

原创 接口隔离原则的设计

我们在做java 开发中,要做到单一职责原则,也就是我不必要的依赖不需要引入。我们举个例子有一个类Modem, 有以下四个方法,但是如何我们有没有办法做到,一部分人调用能看到一部分方法。public class Modem{public void dial(String pno) {}public void hangup() {}public void send(char c) {}public void recv() {}}接口隔离设计:1.增加接口Connectio

2021-10-26 15:56:26 89

原创 工厂枚举设计模式

工厂设计模式我们制单,但是我在开发中遇到一位同事他用的这种方式挺有意思。废话不多说直接上代码。以下以FTP文件操作为demo定义枚举类@AllArgsConstructor@Getterpublic enum FileTypeEnum { UNKNOWN(0, "/upload/insurance", "", "未知"), A_FILE(1, "/upload/insurance/A_FILE", "A文件前缀", "A类文件"), B_FILE(2, "/u

2021-09-28 14:27:08 2207

原创 多线程下SimpleDateFormat为什么报错?

我们有一个工具类提供了一个简单的解析方法:代码如下class SimpleDateFormatTest implements Runnable { private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void run() { try { tr...

2021-09-06 11:09:31 450

转载 订单延时通知技术

(26条消息) redis 延时任务 看一篇成高手系列2_hjm4702192的专栏-CSDN博客_redis 延时任务

2021-09-03 15:29:22 110

原创 Nacos的分布式配置中心一些配置细节操作

1.首先要明确你是基于SpringBoot 操作nacos 还是基于Spring Cloud 操作Nacos这是 Naocs 的官网Open API 指南 (nacos.io)2.如果基于Spring Cloud操作一定注意要在bootstrap.yml 配置不要在application.yml配置nacos信息,如下图所示,不然会失败,bootstrap是整个项目全局的配置优先级最高,而application时基于SpringapplicationContext 的配置,配置一下基础信..

2021-07-22 10:23:41 169

原创 读写锁简单Dome

读写锁一般用于项目中清理缓存,下边就是一个小的Demo.当线程操作写方法时,读线程等待。publicclassCache {staticMap<String, Object> map= newHashMap<String, Object>();staticReentrantReadWriteLock rwl= newReentrantReadWriteLock();staticLock r= rwl.readLock();staticLock...

2021-07-09 11:34:58 98

原创 SpringBoot服务器Tomcat转换undertow服务器

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId><-- 排除tomcat服务依赖 --> <exclusions> <exclusion> <groupId>org.spr.

2021-07-06 16:56:54 313

原创 SpringAOP的执行方式

SpringAOP 的整体涉及是递归方式 +责任链设计模式下面我们通过模拟Spring 源码方式 看下如何调用的/** * 调用链接口 */public interface MethodInterceptor { Object invoke(MethodInvocation invocation) throws Throwable;}/** * 前置通知接口 */public class MethodBeforeAdviceInterceptor implemen

2021-04-22 17:15:12 126

原创 SpringBean的全生命周期

SpringBean完整生命周期我们先执行一个测试,然后在分析源码/** * Bean 全生命周期 */@Componentpublic class JxdSpringBean implements BeanNameAware, BeanFactoryAware,InitializingBean,DisposableBean, ApplicationContextAware { public JxdSpringBean(){ System.out.println("1

2021-04-14 10:50:22 104

springboot.zip

用于存储 springboot.zip

2020-01-15

dubbo_rpc.zip

用于学习dubbo框架 手写的建议版本 里边有注释,都很清晰,如果不懂的话加我

2020-01-15

空空如也

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

TA关注的人

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