自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 收藏
  • 关注

原创 马丁短链03用户信息脱敏

因为如果给前端做,请求返回数据之后未脱敏,只在网页显示上脱敏,攻击者可以做一些简单请求直接看到返回信息,只能防一些小白。所以要在服务器这里做。

2024-08-01 18:45:41 73

原创 马丁短链02异常码 异常拦截器

比如你捕获了一个runtime exception,但是你并不知道具体是什么错误,也就不知道要用哪一个具体的异常码(上面设计的),所以这里自定义详细异常以对应不同的异常码,这样拦截器捕获什么自定义异常就返回什么对应异常码。示例:客户端异常,,构造是1.只自定义一个错误码 2.可以自定义信息 + 默认一级宏观客户端错误码 3. 自定义信息 + 具体客户端错误码 4.什么都要。自定义一个抽象全局异常,然后三大类异常(分别对应三类异常码)继承抽象异常。A客户端异常 B服务端异常 C远程调用异常。

2024-08-01 18:09:10 105

原创 马丁短链系统01

shortlist-all分成三大模块:后台管理admin,生成短链project,网关gateway。一般用swagger,但作者用了api fox,因为swagger代码侵入性大,且有限制。dto(数据传输对象)是在control上用来封装 接收和返回request参数的对象。remote.dto是封装发送请求操纵远程的短链project服务的请求对象。util是一些模块独有的工具类,模块共享的工具类后面会讲。

2024-07-31 16:25:00 202

原创 实习记录2024.1.25

一般git merge,不用git rebase,防止修改步骤丢失。

2024-01-26 14:51:53 433

原创 java八股 多线程

一个key要往分段加数据会加可重入锁,如果高并发情况锁获取重了,会有一个CAS自旋二次保证。然后获取锁的进去添加。volatie关键字定义线程共享变量,然后用这个变量作为线程运行条件。屏障放在写的上面,读的下面。所以不能随便加,要根据读写操作的位置加,连续一个线程获取锁-->偏向锁(一次CAS,后续对比线程id)Owner和锁对象如何关联?不竞争的轮流获取锁-->轻量级锁(每次CAS)用数据当成版本号,比对,如果不对就不能写入。缺点,锁住性能低,分段不能扩容。没人用线程时-->无锁。CAS比较并交换id。

2023-12-28 04:26:44 1073

原创 java八股 集合

jdk1.8 链表的长度大于8且数组长度大于64,链表转换为红黑树。resize到临界值6会退化。红黑树会自平衡,所以是二叉排序树BST的plus自平衡版。1.7之前头插法,扩容运行完之后倒置了。

2023-12-27 03:35:32 399

原创 java八股 spring + mybatis

如果一个spring事务里两组数据库操作中间有一个异常操作,没有被try catch的话。如果把异常try catch处理了,容易导致事务失效,前一段数据库操作做了,异常后面一段没做,直接跳到catch里了。我项目中类内方法调用事务方法导致事务失效,因为this不被spring管理,要获取上下文代理对象去调用,就能执行事务。项目里可以说记录用户登录日志,利用request去获取姓名、ip、、请求方式、url,时间。把二级缓存半成品A当成对象注入半成品B中,可以先完成一个单例B,这时候A也能完成了。

2023-12-25 03:58:37 645 1

原创 java八股 mysql优化

这个trx_id是上面的db_trx_id,代表上一次插入或者修改记录的事务号。undo log是逻辑日志,记录和操作相反的语句,用来撤销。如果这个号不在活跃集合里,代表该事务修改完成提交已经结束。节点可以自动平衡保证log2 n的查找复杂度.redo log是物理日志,记录的是正向的操作。但因为是二叉树,数据多了层数还会多。问题还有一个丢失更新。

2023-12-24 21:24:07 999

原创 java八股 redis

多路复用IO会用一个select去轮询监听一个socket集合,一个socket能代表一个需要拷贝的数据,在第一阶段谁先就绪就谁来,可以看成并行,先来先服务,第二阶段循环调用recvfrom去处理各个socket。但哨兵选出了新的主节点,老主节点降成从节点并被主从复制,那么这段时间的操作会丢失。redis速度主要受网络IO影响,所以易受影响的部分加了多线程升级,但是最终命令执行还是串行的。主节点加锁宕机,从节点变主节点但是锁没来得及更新过来,那么其他线程可以获取锁。aof只记录写命令,不记录读命令。

2023-12-24 01:47:40 704

原创 java八股 设计模式

相对于简单模式的一个工厂生产所有咖啡,这里只定义了一个抽象咖啡工厂,然后针对每一种咖啡实现自己的工厂,那么以后添加新咖啡的时候就不会修改以前的咖啡工厂类了,只需要自己新建一个工厂。新加咖啡类的时候需要在唯一的那个工厂类里加代码,这样就耦合了。工厂模式只能应付同一类产品,如果要工厂多类产品,就要抽象工厂。做到对拓展开放,对修改关闭。

2023-12-22 23:50:53 497

原创 java八股jvm

从下往上找,有同名类优先使用上级加载器的,不用自己的,父加载器没有就加载自己的。年轻代会使用复制算法,清理效率高。

2023-12-22 22:44:50 775

原创 黑马点评09 秒杀功能总结

订阅锁的消息,一旦其他线程释放了锁,就会发布一个消息通知别人来抢。有一个剩余重试时间waitTime,所有抢锁时间加起来如果超过这个阈值,就会放弃重试,如果还有剩余重试时间,就继续等发布然后抢,等发布的时间就是当前剩余重试时间。可重入:锁底层是hash结构,hash的名字是,hash的key(field)是线程名字,value是重入次数。只有服务宕机之后,看门狗机制也停止,才会锁过期,但这不是误删问题(服务阻塞但没有宕机)。多获取一次锁次数加一,结束一次次数减一,只有次数为0线程才会释放锁。

2023-12-22 00:03:50 1118

原创 黑马点评08 秒杀优化 变阻塞队列为消息队列

可以让一个消息被单个消费者拿到,也可以被多个消费者拿到。BLPUSH和BRPOP在存取的时候会自动阻塞。Redis的list是一个双向链表,

2023-12-20 00:08:29 436

原创 黑马点评07 秒杀优化 加阻塞队列

因为之前每一步是串行操作的,其中有大量的数据库操作会很影响效率,所以把资格判断和下单业务分离开。在jmeter里指定该文件作为token来源,就能模拟1000个用户。这里使用的阻塞队列很简单,容易出现很多问题,所以后面引入消息队列。创建好1000个token(用户),放到txt文件。没有元素的时候取对象会阻塞,直到有新内容进来。

2023-12-19 18:13:27 421

原创 黑马点评06分布式锁 2Redisson

实战篇-21.分布式锁-Redisson的multiLock原理_哔哩哔哩_bilibili。

2023-12-17 13:27:55 1201

原创 黑马点评05分布式锁 1互斥锁和过期时间

因为jvm内部的sychonized锁无法在不同jvm之间共享锁监视器,所以需要一个jvm外部的锁来共享。用set + 参数的方式同时设置锁和过期时间,保证不会因为过期时间没来及设置就宕机导致死锁。redis 的setnx不会自动释放锁,要是加锁后服务宕机,锁得不到释放可能死锁。在订单创建业务那里把sychnoized锁改成自己实现的分布式锁(获取+解锁)为了维持 释放锁时 判断线程id和释放锁操作的原子性,重写unlcok方法。提前读取好lua文件,避免频繁读取,等会调用。非阻塞式就是别人拿锁我就返回。

2023-12-15 22:49:53 1037

原创 黑马点评04集群下的并发安全

为了应对高并发,需要把项目部署到多个机器构成集群,所以需要配置nginx。

2023-12-15 16:30:03 534

原创 一些java问题集合

用target去调方法,有传入对象就把传入对象变成target,否则自己就是target。一个框架自己的一个别人的标准,一个byTye一个byName。

2023-12-15 15:57:33 382

原创 黑马点评03一人一单

如果对整个方法加sychronized锁,那么锁监视器是this(当前对象),那么不管什么用户来,监视器都是this,相当于串行执行了,性能差。一人一单是同一个用户来造成的并发安全问题,所以需要用某个用户的特征作为锁监视器,锁住某个用户的并发操作,而不影响不同用户之间的操作。toString返回值会new一个String,所以每次都是新对象,即便是同一个用户,每次的锁监视器都不一样。但是没必要对整个方法加锁,所以这里把后面5,6,7封装到createVoucherOrder方法里。基本解决一人一单问题。

2023-12-15 00:44:12 462

原创 黑马点评02优惠券秒杀(超卖问题)

因为以上原因要用。

2023-12-14 23:19:22 953

原创 Spring

Ioc是一种容器,创建好所有的对象,你要用就直接拿。Aop是面向切面编程,把需要复用的代码抽象成一个切面(对象), 提高复用性。

2023-12-13 19:17:28 394

原创 黑马点评01

非结构化数据库,和sql的区别在于没有数据库表之间的关系(主键外键),一般的存储形式是JSON。每个json里面都存储了该记录的所有数据,所以有一定重复性。

2023-12-13 15:41:47 452

原创 java学习part42反射

187-反射机制-反射的理解与使用举例_哔哩哔哩_bilibili

2023-12-11 16:07:53 390

原创 lambda表达式学习

lambda表达式就是对匿名方法的进一步简化。

2023-12-10 01:09:43 383

原创 java学习part41泛型

泛型类不能是基本类型。

2023-12-09 23:59:06 355

原创 java学习part40collections工具类

162-集合框架-Collections工具类的使用_哔哩哔哩_bilibili感觉类似c++的algorithm包,提供了很多集合的操作方法

2023-12-07 22:50:44 377

原创 java学习part39map

个人理解是c++的pair,代表一个键值对。Map就是entry的叠加。

2023-12-07 02:15:29 772

原创 java学习part38一些常用类和api

151-常用类与基础API-其它常用类的使用:BigInteger、BigDecimal、Random等_哔哩哔哩_bilibili

2023-12-07 00:20:09 374

原创 java学习part37定制排序和自然排序

对于一些排序方法,允许传入的话按定制的排序规则来,不传入默认按自然排序来。

2023-12-05 17:17:47 378

原创 java学习part36set

必须重写hash方法,否则调用object的方法随机算了一个hash值,即便内容相同算出来的值也不一样,因为和你的内容无关,是随机算的。而重写的方法要根据你所有的内容算一个独特hash值。如果hash一样且equals也是true就是重复 ,调equals是为了保险,保证排除hash碰撞的可能。加入集合的时候会先调用重写的hash方法计算hash值,不一样就加入。

2023-12-05 15:08:55 359

原创 java学习part35List

155-集合框架-List接口常用方法的测试_哔哩哔哩_bilibili

2023-12-05 14:03:39 364

原创 java学习part34collect

add只能加object,如果有基本类型会装箱。类似c++的for( auto x:v)

2023-12-05 00:25:48 381

原创 java学习part33Date

两个构造器两个方法。

2023-12-03 21:45:44 412

原创 java学习part32StringBuffer和StringBuilder

不够用:长度为 原长度*2+2;如果还不够,那么就扩容到目标需要的长度。

2023-12-03 20:28:21 399

原创 java学习part31String

编码和解码要一致,默认utf-8。

2023-12-03 17:46:29 349

原创 java学习part30callabel和线程池方式

140-多线程-线程的创建方式3、4:实现Callable与线程池_哔哩哔哩_bilibili实现类使用方式 返回值

2023-12-02 20:49:01 414

原创 java学习part29线程通信

类似于golang的channel,类似于go的wait(),

2023-12-02 20:14:15 454

原创 java学习part28线程安全Lock锁方式

和以前的加锁一样,同步代码前加锁,代码后解锁,就表示锁住了这一块代码。lock是上面声明的静态常量。

2023-12-02 18:55:22 393

原创 java学习part27线程死锁

138-多线程-线程安全的懒汉式_死锁_ReentrantLock的使用_哔哩哔哩_bilibili

2023-12-02 17:32:19 397

原创 java学习part26线程安全

136-多线程-同步代码块解决两种线程创建方式的线程安全问题_哔哩哔哩_bilibili

2023-12-02 16:37:13 372

黑马点评-完整代码资源

黑马点评-完整代码资源

2023-12-15

gin框架简单使用示例

gin框架简单使用示例

2023-09-01

马士兵百万级并发IM即时消息系统

马士兵百万级并发IM即时消息系统

2023-08-31

go学习part13 客户管理系统

go学习part13 客户管理系统

2023-08-21

go学习part12 收支软件小项目

本章小项目

2023-08-17

空空如也

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

TA关注的人

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