- 博客(62)
- 收藏
- 关注
原创 生产者/消费者模式实现
期望效果:生产者存入元素,消费者取出元素,队列容量为 5;② 队列,生产者向队列中添加,消费者从队列中阻塞获取。① 一个生产者,一个或多个消费者。
2022-10-17 23:46:03
279
1
原创 多线程累加计数
基本思路: static 类型的变量用于累加,每个线程执行 1000 次循环。需求说明 : 5 个线程累加求和至 5000,然后输出累加结果。实在无话可说,不知道这样算不算摆烂;
2022-10-16 22:48:54
526
原创 多线程轮流打印 ABC
写作初衷:网上多线程轮流打印 ABC 的例子已经很多了,但不是自己的逻辑沉淀不出知识。最近考虑通过实现,多线程累加求和,简单总结下并发相关的知识点。
2022-10-16 00:15:48
516
原创 HashSet 保证元素不重复?
起因:在总结 HashSet 相关知识点的时候,发现有些内容网上说不通,然后通过 debug + 分析源码,找到自己的理解前置知识点:① HashSet 和 HashMap 的关系:HashSet 实现 Set接口,内部含有 HashMap 类型的属性 map添加元素为 add(), 会调用 map.put(),由于 set 是单元素的,所以会有一个 Object 类型的 PRESENT 属性用来占位。
2022-10-11 22:20:45
705
原创 秋招笔试-10.10
⑤ 可用于修饰 interface 的有:final 能否用来修饰 interface。② string.concat(), string.replace() 返回新对象。 where 1 = 2, 常用于复制表结构,原数据不要,仅保留表结构。final 修饰类,成员变量和方法,不能用于修饰 interface。 B 类:128 - 191。 C 类:192 - 223。 应用层:HTTP 协议。 A 类:0 - 127。 传输层:TCP 协议。 网络层:IP 协议。③ mkdir 命令。
2022-10-10 21:21:03
415
原创 brief note-2022
① 类修饰符应在 class 关键字之前② 抽象方法不能有方法体abstract 能用来修饰什么?类,方法,属性① abstract 与 private :不能联用private 修饰成员变量,成员方法:若用 abstract 修饰方法,则子类必须要实现该方法,而private 修饰的方法只能在本类中被使用,子类不能继承② abstract 与 final :不能联用final 修饰类,方法,变量,主要还是方法,final 修饰后的方法防止任何继承类修改其实现。
2022-09-30 13:32:17
1396
原创 JMH-并发包分析
汪文君目的:复现书中使用 JMH 代码微基准测试工具基测试常见的并发包和集合类的过程,对并发性能问题做初步了解内容:① 了解 JMH :ArrayList 和 LinkedList 的测试对比② 常见并发包测试。
2022-09-25 23:04:22
373
原创 Java 对象内存占用分析
占用多大内存?面到这个题目的时候,我实际上不知道到底问的是啥?从小白的角度来看,这不是分三部分吗?String 类型的引用,String 实例对象,String 类型的字符串难道是把这三者加起来?可 JVM 那本书上并没有说引用类型占多少字节,String 类型也不属于基本数据类型啊?本文基于小白水平借助 openjdk.jol 工具复盘该题,主要包含以下三个方面的内容:① new String() :发生了什么,即本题实际在考察什么的内存占用。
2022-09-18 18:15:51
1141
原创 innodb_ruby 视角下 MySQL 记录增删改
前言:学习MySQL的时候,想到一个问题,记录在文件中是怎么存放的?:通过 来分析文件,记录对应的是一串二进制:记录存放在页中的中,插入新记录时向申请空间:中的记录紧密排列。将记录紧密排列的这种结构称为堆heap,记录在堆中的相对位置称为 ,该值随记录的插入递增:执行 delete语句时,分为阶段、阶段:执行 update 语句时,分更新主键和不更新主键的情况,最终分为:处理旧记录,插入新数据反复思考上面的信息后:初步认为,无论插入顺序如何。从物理层面来说,记录在文件中是顺序排放的从逻辑层面来说,记录是按照
2022-06-22 12:37:07
339
原创 centos7 安装 MySQL 及配置 innodb_ruby
内容说明:阿里云服务器 centos 7 系统上安装 MySQL 并配置 innodb_ruby参考资料:尚硅谷-p99 Linux 下安装MySQL 5.7 版本黑马-p65 MySQL安装Linux版本CentOS7安装ruby2.6.3Try to install GPG v2 and then fetch the public key:MySQL Community Server 5.7.38Centos 选择 Red Hat版本选择:rpm package, rpm bundle ,Compr
2022-06-20 15:47:42
602
1
原创 mysql 数据恢复 (.ibdata1, bin log)
测试MySQL 主题:两台电脑模拟故障后数据迁移恢复实验环境说明:windows MySQL 5.7版本,两台电脑 台式机 笔记本电脑测试目的:通过拷贝数据库目录文件的方式,模拟在另一台电脑上恢复数据库数据库资料来源:实验步骤:① 台式机 数据库目录文件拷贝到笔记本对应的 目录下② 未拷贝 ibdata1 文件之前,可以通过 列出拷贝过来的数据库以及数据库表③ 执行查无此表参考MYSQL ERROR 1146 Table doesnt exist 解析④ 拷贝 文件至目录下笔记本上的MySQL也
2022-06-19 20:56:03
2541
原创 Java Interview in Action - HashMap
HashMap【JDK1.8】引入红黑树和扩容优化1. HashMap 类的使用方式2. HashMap 相关接口2.1 Map 接口2.2 Entry 接口3. HashMap 类属性4. HashMap 静态内部类4.1 Nodestatic class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V>
2022-06-07 23:20:39
107
原创 The Tree (AVL, 2-3-, 红黑,Huffman)
参考自:-周冠亚- Robert Sedgewick,Kevin Wayne-程杰数据可视化网站内容说明:主要是想了解下红黑树以图示的方式分析了 从 AVL 过渡到 2-3树然后到 红黑树最后介绍了 Huffman Tree整体而言是对常见的 Tree 类型的数据结构的初步认识问题:AVL , 2-3-树, 红黑树之间的关系?AVL : ① 二叉排序树 ② 左右子树高度差 ≤ 12-3-树:AVL + 完美树【根节点到叶节点路径高度相同】红黑树:AVL + 红黑属性红黑树的性质:① 每个节点子树数目 ≤
2022-06-06 12:29:37
145
原创 Java Interview in Action - DelayQueue
DelayQueue :支持延时获取元素的无界阻塞队列使用 PriorityQueue 实现队列中的元素必须实现 Delay 接口class Message implements Delayed{ @Override public long getDelay(TimeUnit unit) { return 0; } @Override public int compareTo(Delayed o) { return 0;
2022-05-28 19:35:09
122
原创 Java Interview in Action - LinkedBlockingDeque
LinkedBlockingDequeue 由链表实现双端阻塞队列可在队首和队尾分别插入和删除操作可指定队列的容量,若不指定队列容量,默认容量为 Integer.MAX_VALUE本文流程图提取码:1l7t1. LinkedBlockingDeque 使用方式public class LinkedBlockingDequeDemo { public static void main(String[] args) throws InterruptedException {
2022-05-28 19:33:17
156
原创 AQS-条件模式
AQS 条件模式条件模式使用示例:Condition 接口中的 await/signal 与 object 中的 wait/notifyConditionObject 与 Condition 之间的关系ConditionObject 是 AQS 的内部类,实现了 Condition 接口,主要有两个属性 firstWaiter,lastWaiterpublic class ConditionObject implements Condition, java.io.Serializable {
2022-05-16 17:52:20
220
原创 Java Interview In Action - AQS(独占/共享模式)
继续写博客吧,不然时间都被荒废了,这次一定要拿下 AQS博客内容来源于 周冠亚老师的 Java 面试一战到底,主要是根据书中的内容对JUC 源码梳理梳理的时候是将源码复制,翻译英文注释,然后对照书上纠正翻译问题和理解问题,基本上是一篇草稿blogAbstractQueuedSynchronized1 AbstractQueuedSynchronizer独占式获取锁,aos 是 aqs 的父类关键词:blocking locks, semaphores, events该类中的方法:// 独占
2022-05-14 18:34:40
451
原创 ArrayList && { }
文章说明:看源码分析 ArrayList 与LinkedList 的区别,注意到 ArrayList 类中的三个基本属性,对创建多个ArrayList 实例,指向 { }时是否会数据覆盖产生疑问,以下是简要分析。1. ArrayList 中三个数组private static final Object[] EMPTY_ELEMENTDATA = {};private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};transi
2022-04-19 21:03:24
308
原创 centos7 编译 openJDK 8
文章说明:本人Linux菜鸡一枚,迫于研究 openJDK 源码的需求,参照网上各路大神的博客,终于编译成功。总结了编译成功参照的博客,以及问题的解决过程参考教程:Centos7编译openjdk8设置环境变量1配置环境变量2说明:基本按照 教程1就可以顺利编译 jdk,配置环境变量的时候,可以对比下后面两个博客中的参数,设置成自己的安装路径1. 源码下载Centos7编译openjdk8:是通过 hg 下载的,笔者之前参考的其他教程,都是从 openJDK 官网上下载的。编译 jdk 8 需
2022-04-15 17:12:22
1889
原创 Java并发编程的艺术-thread.join()
内容说明:整理 Java并发编程的艺术中线程间通信,分析Thread.join() 使用案例时,不明白为什么 wait() 的是主线程。准备折腾下 openJDK 源码,无奈 source insight 出bug了,暂时先分析下JDK源码1. thread.join() 案例案例说明:① 使用 new Thread(new Runnable(previous), i) 创建线程名为 i 的线程② 每个线程持有previous线程的引用,previous调用 thread.join() 方法pub
2022-04-15 15:24:56
460
原创 如何查看redis源码中的 zskiplist 结构
文章说明:阅读 redis 设计与实现(第二版)第5章 跳跃表实现时,跳表的数据结构不是很理解,网上搜索如何阅读redis源码,找到相关源码。1. 使用压缩包安装是否需要另外下载源码?虽然一开始就找到了该网页,但是陷入了一个问题:本文是使用源码安装,还是使用压缩包安装,搜索了一堆网页之后,发现答案还是在本文中原因是认识到:开启redis进程肯定要装入程序,则不管是通过那种方式安装,源码肯定会在安装redis的相关目录中说明:在 redis-cli 下输入info 关注 #Server 查看 redi
2022-04-13 11:34:40
721
原创 redis 基础数据结构
问题:redis 跳表与红黑树的查询性能?没错碰到这个问题的时候,笔者现在还不清楚,快表,跳表,也更不用说红黑树。不过没关系,终会进步的,沉下心,一步一个脚印来,与君共勉。本文计划参考 redis 相关的教材,对 redis 的基本数据类型进行梳理和总结目前了解到的关于 redis 的教材:Redis 实战,Redis 开发与运维,Redis 设计与实现(第二版)Redis 深入历险1. String (字符串) :sds,ArrayList① 键值对127.0.0.1:6379[1]>
2022-04-12 22:02:16
960
原创 黑马redis实战-优惠券秒杀
视频地址1. 全局唯一 ID1. 1 问题:针对优惠券秒杀模块全局唯一 ID 的作用是什么?作为优惠券订单 id1.2 问题:为什么不使用数据库自增 ID ?考虑分布式场景下ID的全局唯一性分库分表后,id主键如何处理① 数据库自增 id:先从一个数据库表中获取自增id,再根据该 id 往对应的分库分表中写入问题:生成id的数据库表高并发瓶颈适用场景:并发不高,数据量太大导致的分库分表② uuid:UUID.randomUUID()问题:不适用于实际的业务需求,生成的订单号UUID字
2022-04-11 22:10:09
2348
2
原创 黑马redis实战-商户查询缓存
商户查询缓存本文的主题是商铺缓存。主要包括:添加商铺缓存到 redis,实现缓存和数据库的一致,redis 缓存面临的三个问题的解决:缓存穿透,缓存雪崩,缓存击穿实现效果:1. 添加商户缓存需求分析:根据 id 查询商铺,若 redis 中有商铺缓存,直接返回。否则查询数据库并将商铺信息缓存到 redis 中代码实现:① Controller 层,获取url中的请求参数 “id”// ShopController.java /** * 根据id查询商铺信息 * @pa
2022-04-10 23:24:14
687
原创 黑马redis实战-短信登录
视频地址内容说明:视频内容梳理,以及版本迭代过程实现效果:输入手机号获取验证码,校验成功后进入 “个人主页”需求分析:发送短信验证码验证码登录,注册校验登录状态1. 基于Session 实现登录① 发送短信验证码—保存验证码到 session@Overridepublic Result sendCode(String phone, HttpSession session) { // 1.校验手机号 if (RegexUtils.isPhoneInvalid(phon
2022-04-10 20:51:36
984
原创 深入理解JVM-final
内容说明:由牛客上的Java练习题–final类型变量计算与类型提升,查阅周志明先生 深入理解JVM 第3版, 了解的部分与 final 变量相关的知识点1. 问题引入题目说明:代码说明:以下是在IDEA上编译能通过的代码public class finalTest { public static void main(String[] args) { byte b1 = 1, b2 = 2, b3, b6; final byte b4 = 4, b5 = 5
2022-04-09 15:38:43
736
原创 黑马redis实战-ThreadLocal
问题:使用 Nginx 负载均衡时,用户的查询请求会分配到不同的JVM,当接收到用户请求时,JVM如何区分用户从而响应用户?redis实现共享session登录 视频中采用的办法是:利用 redis 的 hash 结构,token 作为 key ,用户属性和属性状态分别作为 <field, value> 保存然而:JVM 是如何区分用户的?比如:用户登录之后会进行抢购优惠券等活动,JVM在处理请求的时候,如何保证响应的是哪个用户呢?1. token 与 userMapUserServ
2022-04-08 17:32:26
2649
2
原创 黑马redis实战-Nginx负载均衡
视频地址:集群下的线程并发安全问题说明:Nginx 无法实现 负载均衡是所有 BUG 里面耗时最久的,但是过程却没有记录下来,记录本篇是寻找Nginx问题的过程中,作为零基础了解到的Nginx相关的知识。1. Nginx 负载均衡问题23:13 解决的问题,当时的感觉是,幸福来得太快就像龙卷风。下面是解决时尝试的方案:2. nginx.conf 配置文件3. 代理转发:proxy_pass问题:为什么 8080 需要添加 /api, 而 8081 则不需要 ???nginx 之 pr
2022-04-07 22:33:37
1223
1
原创 黑马redis实战-秒杀页面
视频地址 :优惠券秒杀本文主要记录秒杀页面操作过程中的BUG1. 代金券不显示问题提示:前端页面不显示代金券,控制台提示 找不到 subTitle根据报错提示,定位到是 VouncherMapper.xml 中数据库查询字段的问题2. 秒杀券不显示在 shop-detail.html 中修改的,保存修改,并且重新启动nginxv-if: 条件性地渲染一块内容3. 商铺加载后显示商铺不存在原因是测试 逻辑过期缓存击穿的时候,redis 中需要有缓存信息,因此需要先执行单元测试,将商铺信
2022-04-07 21:37:13
1252
1
原创 黑马redis实战--Jmeter压测工具
本文主要是 Jmeter压测工具使用过程中出现的BUG 的记录项目中使用 Jmeter 做压测是完成商铺缓存部分缓存击穿1. 基本配置 Add - Listener添加用于进行压测结果分析的:View Results Tree, Summary Report,Arrgreate Report2. UTF-8编码问题3. 秒杀抢购单人秒杀抢购单人① 问题说明:无法复现视频中50%失败50%成功的结果解决方案上述问题的关键就是 authorization 字段,其实也是回答如何判断是
2022-04-07 21:17:16
1585
原创 黑马redis实战-redis配置
1. application.yamlredis: host: xxx.xxx.xxx.xxx port: 6379 password: xxxxx lettuce: pool: max-active: 10 max-idle: 10 min-idle: 1 time-between-eviction-runs: 10s jackson: default-property-inclusi
2022-04-07 20:43:09
1056
原创 黑马redis实战-项目部署
视频地址1. 项目架构说明:springboot + nginx + redis + mybatis-plus前端:使用nginx做反向代理,涉及使用nginx做负载均衡redis:缓存截取后的用户信息,缓存商铺信息,缓存秒杀券抢购信息mybatis-plus:操作数据库2. 前端页面效果3. 主要功能说明:① 用户登录② 查询商铺③ 秒杀券抢购4. 项目部署p25.导入黑马点评项目按照视频上的步骤来即可,本文主要记录遇到的 BUG① 导入文件标红:Project str
2022-04-07 12:44:26
953
原创 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
0. 题目描述剑指 Offer II 003. 前 n 个数字二进制中 1 的个数2. 解题思路分析如何计算每个数对应的 1 的个数位运算核心代码for(int i = 0; i <= n; i++){ int t = i; while(t > 0){ ans[i] += t & 1; t = t >> 1; }}注意:这里不能用 i 直接位移,因为每次i都会右移到0,相当于是循环每次都从0开始
2022-01-06 21:58:14
257
原创 剑指Offer II 002. 二进制加法
0. 题目描述剑指 Offer II 002. 二进制加法2. 题目分析核心逻辑:位运算,带进位相加涉及的关键点:① 位操作,字符串转化为 char 类型② 进位,每次位运算后的进位,最后一次进位③ 字符串长度不一致是否考虑溢出:104 也即 1024 ,数值范围小于 216 ,个人认为不用考虑3. 测试用例分析简单例子补充注意点:① 关于String 索引 index 范围的测试② 关于 StringBuffer 中 append(int i) 参数类型测试③ 关于
2022-01-06 21:12:59
235
原创 剑指 OfferII 001. 整数除法
0. 题目描述剑指 Offer II 001.整数除法题目描述:整数相除,结果取整(舍弃小数位)题目要求:不得使用 *,/,%约束条件:[ -231 , 231 -1],若除法结果溢出,返回 231 -11. 内容说明以下四种题解来源于 简单易懂Java/C++ /Python/js/go - 整数除法(剑指)未看解答前本人在尝试位运算思路时,在处理移位除数2时就不知道怎么处理了,后来看解答了解思路后,深入了解了边界问题2. 解法一:减法代替除法版本① :a , b 取
2022-01-05 23:10:05
420
原创 java int 类型溢出?
0. 前言问题来源:疑问:奇数-偶数 != 0 ,但程序为什么可以无限次循环,会不会溢出?1. 测试代码public class Test { public static void main(String args[]) { int m = Integer.MAX_VALUE; int n = Integer.MIN_VALUE; System.out.println(m);//2147483647 System.out.
2022-01-05 21:19:07
406
原创 JMV j = j++ 基于栈的解释器执行过程分析
0. 前言问题来源:疑问:中间变量缓存机制?深入理解Java中间变量的缓存机制看到这位大佬的测试用例,我简直惊呆了,于是决定自己测试一下,以便从JVM层面了解问题的根源1. 测试用例:public class Test02{ public static void main(String[] args) { int i = 8; i++; System.out.println(i); int j = 8;
2022-01-03 17:30:47
236
原创 IDEA Unable to parse template “Class“
问题说明:在IntelliJ IDEA 下创建class文件提示Unable to parse template "Class"Error message: This template did not produce a Java class or an interfacepackage cn.itcast.web.servlet;/** @author xxx @create 2021-12-20:35public class ServletDemo{}问题解决过程:① 复
2021-12-10 21:20:25
2004
2
原创 IDEA 部署web项目
1. IDEA project && moduleidea 中 project 和 module 与 eclipse 中的对应关系IDEA 中创建 project 约为 Eclipse 中创建 workspaceIDEA 下创建 Java 工程 和 Java EE 工程的区别① Java 工程② Java 工程与 JavaEE 工程的区别③ Empty Java Project2. 部署web项目部署静态项目,选择部署动态项目① 选择 Java E
2021-12-08 22:06:53
526
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人