自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浮点数在计算机中的编码方式

我们常能听到,直接用浮点数做运算得出的结果是不准确的了;那么这些现象的底层原理是什么呢?这需要从浮点数在计算机中的编码方式说起。

2024-08-06 10:09:50 343 1

原创 堆外内存泄露排查思路及案例分享

堆外内存泄露排查思路及案例分享

2024-07-12 10:03:12 369

原创 【思考】服务的吞吐量与请求耗时的关系

显然CPU、IO的“实际使用耗时”是恒定的(只取决与代码和数据),而“排队耗时”是和机器负载有关的,即和QPS有关。所以在存在排队的情况时,降低机器的QPS,是可以降低单次请求的耗时。我们提到服务的吞吐量,其实提的都是平均请求耗时在x毫秒内时,服务可以支撑的最大QPS。如果降低上文提到的“实际耗时”,理论上可以为“排队耗时”留出更大的空间,即可以支撑更高的QPS/吞吐量。题外话:一般说JVM的ZGC相较于G1,可以减少GC对请求耗时的影响,但会降低服务的吞吐量。他们之间是否存在一些相互的作用呢?

2024-06-01 23:26:08 182

原创 【思考】什么是CPU利用率?

题外话:一个线程在某一时刻最多只能被一个CPU核心所负载执行,而如果想占满该核心,只需要保证该线程在无阻塞的持续运行(并且获取时间分片不受限),而无需保证执行的是什么复杂的算法!这里是很反直觉的——简单的while(true)死循环和一个复杂的计算算法在一个时刻中对CPU的压力是相同。最明显的一个问题是:CPU处理不同指令的时间是不同的,也就无法预估一个精准的“极限速度”。类比于CPU的话,那该是“当前处理二进制指令的速度/处理二进制指令的极限速度”。又是如何计算出来的?同样CPU利用率的计算方法也是“

2024-06-01 21:46:42 303

原创 JDK21虚拟线程缺陷总结

JDK21虚拟线程的缺陷探究

2024-03-15 19:18:17 905

原创 JIT逆优化引发的Java服务瞬时抖动 问题排查&解决方案

探寻Java服务抖动根因,避免JIT逆优化

2024-02-06 13:39:01 1268 1

原创 Java多线程知识点汇总

Java多线程知识点汇总

2023-03-26 12:25:25 781

原创 使用node.js+netty实现内网穿透

使用node.js+netty实现内网穿透

2023-03-26 12:23:35 744

原创 由MySQL加锁机制引发的死锁案例分析

一个由MySQL加锁机制引发的死锁案例分析

2023-03-21 21:12:05 419

原创 C语言数组越界导致死循环实例解析

C语言数组越界导致死循环实例解析

2022-05-06 11:38:33 951

原创 《深入剖析Tomcat》源码学习(边读边更新)

最近在读《深入剖析Tomcat》这本书,书中附带了很多源码帮助学习.但是部分源码存在一些小问题需要修复才可以正常运行.另外有些源码的运行方式也需要特殊注意.第一章如下图所示,代码清单1-6中直接发送了响应体,缺失了http响应头,需要补充.否则http请求会失败.修改后的代码:public void sendStaticResource() throws IOException { byte[] bytes = new byte[BUFFER_SIZE]; Fil

2022-05-04 12:02:52 626 1

原创 [入门]JEB3动态调试网易mumu模拟器踩坑

JEB3动态调试网易mumu模拟器配置

2022-03-13 16:13:21 1326

原创 log4j2远程代码执行漏洞 复现与分析

一、复现代码来源:远程执行代码、RmiServer参考文章:5 分钟复现 log4J 漏洞,手把手实现利用上述代码很容易就在本地复现 log4j2远程执行漏洞。二、分析整个攻击链路由RMI服务器、目标服务器、恶意用户构成。恶意用户向目标服务器发送构造的字符串,目标服务器会从RMI服务器上下载并加载一个Java类。因为JVM加载类时,会执行static代码段,所以便会触发恶意代码的执行。...

2021-12-11 23:10:06 3159

原创 读《深入理解计算机系统》虚拟内存

最近技术学习有点懈怠了,几个月读的书也没几页。虚拟内存相关的知识,在操作系统课上学的不太明白,趁着周末赶紧补一补吧。挑战一下自己,周末两天读完《深入理解计算机系统》的第9章,559页~619页,共60页。虚拟内存有什么用?1、将主存看做是磁盘的高速缓存,只保存活动区域,高效地使用了主存。2、为每一个进程提供了一致的内存空间,简化了内存管理。(每个进程有一个独立的页表)3、保护每个进程的地址空间不被其他进程破坏。虚拟内存的虚拟页有哪些状态?1、未分配的:没有关联任何数据,不占用

2021-10-24 13:08:19 195

原创 CE Tutorial 第9关过关记录

题目步骤 9: 注入++: (密码=31337157)这一步将会解释如何处理游戏中的共用代码, 这种代码是通用在除了自己以外的其他同类型对像上常常你在修改游戏的时候, 你找到了一个单位的健康, 或是你自己角色的健康, 你会发现一种情况:如果你把健康相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了。 在这种情况下, 你必须想办法区分自己与敌人。 有时候很简单,你只要检查最前面的4个字节(函数指针表), 它通常指向一个独一无二的地址, 代表着游戏玩家角色,而有的时候它是一个团体号码,或

2021-04-21 13:49:00 977 2

原创 《深入理解Java虚拟机》笔记:volatile的实现原理

volatile在并发程序中有两个特点:1、保证其修饰变量的线程间可见性;2、禁止对其修饰变量的指令重排。这两个特点都与volatile底层实现有关。通过观察汇编代码可以发现,在对volatile变量赋值后,会多执行一条指令:lock add1 $0x0,(%esp)这条指令的作用是:将本处理器的缓存写入内存,并使其他处理器的缓存无效。显然通过这条命令可以让前面对volatile变量的修改对其他处理器立即可见。因为在Java中,...

2020-09-17 22:22:06 169

原创 MySQL45讲 【orderby是怎么工作的?】 笔记

Extra 字段中的 Using filesort 表示需要排序.MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。CREATE TABLE `t` (`id` int(11) NOT NULL,`city` varchar(16) NOT NULL,`name` varchar(16) NOT NULL,PRIMARY KEY (`id`),KEY `city` (`city`)) ENGINE=InnoDB;select city,name from t w

2020-08-24 20:49:26 142

原创 redis更新缓存导致数据一致性问题的解决方案

解决方案一:延时双删https://zhuanlan.zhihu.com/p/1470284971、删除缓存(其他线程此时查询缓存为空,会查询到数据库的旧值,并回填脏数据)2、更新数据库3、休眠500ms,等待脏数据回填完成4、再次删除缓存,清空脏数据解决方案二:内存队列https://www.jianshu.com/p/5561d7d6dea71、操作业务时,直接将其丢进队列,等待异步执行;2、当出现读请求时,先读缓存,成功则返回;3、如果缓存不存在,再去.

2020-08-24 20:38:44 675

原创 算法题:求数组中唯一出现n次的数字,其他数字都出现了m次——通用解法

1、求数组中每个数字的二进制形式的各位出现 1 的次数,如:[1010, 1100, 1011] 各位出现 1 的次数为 [3, 1, 2, 1]2、当出现 1 的次数可被 m 整除时,所求整数的这一位为 0 ,否则为 1,可得所求数字的二进制形式3、二进制形式转十进制形式,得到结果...

2020-08-06 23:46:55 511

原创 慢SQL分析——强制索引、limit性能优化、join的底层原理

今天操作了一张数据挺多的MySQL表,用到了如下SQLselect t1.id, t1.b, t1.c, t1.d, t2.e, t3.ffrom t1left join t2 on t1.a = t2.aleft join t3 on t1.b = t3.bwhere t1.state = 1order by t1.idlimit 0, 20其中 t1.id 为其主键,t2.a 和 t3.b 均有索引。所以按道理来说 t1会用到主键索引,t2会用到 index_a,t3会用到in

2020-07-08 22:24:39 622 1

原创 计时攻击 测试程序

https://coolshell.cn/articles/21003.html

2020-07-06 22:40:00 441

转载 如何用WindowsAPI取得一个进程的所有线程句柄

#include <tlhelp32.h>int GetProcessThreadList(DWORD th32ProcessID) //进程bai的duID{ HANDLE hThreadSnap; THREADENTRY32 th32; hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, th32ProcessID); if (hThreadSnap == INVALID_HANDLE_VALUE) { re.

2020-06-27 21:16:17 1230

原创 利用Python调用Windows API,实现任务管理器功能

任务管理器具体功能有:1、 列出系统当前所有进程。2、 列出隶属于该进程的所有线程。3、 如果进程有窗口,可以显示和隐藏窗口。4、 强行结束指定进程。通过Python调用Windows API还是很实用的,能够结合Python的简洁和Windows API的强大,写出各种各样的脚本。编码中的几个难点有:1、API的入参是结构体时,怎么解决?答:Python内手动建立结构体。2、调用API的具体方式是什么?答:通过win32模块或ctypes模块。前者更简便,后者函数库更全。

2020-06-27 21:04:05 6230

原创 二叉树先序,中序,后序遍历 非递归形式

import java.util.HashSet;import java.util.Set;import java.util.Stack;public class BinaryTreeTraversal { //先序 public static void preOrder(TreeNode root) { TreeNode node = root; ...

2020-04-05 20:25:32 232

原创 什么情况下Integer用==判断可相等?String呢?

首先我知道Integer和String的equals都重写过,比较的是对象的value字段,这个问题很简单.而Integer和String用==判断时,比较的都是地址,就需要讨论了.先说结论使用直接赋值或valueOf()方法时,Integer和String都会查缓存,缓存中有就返回缓存中的地址,没有则新建.使用new Integer()和new String()方法都不查缓存,直...

2020-04-01 00:50:34 429

原创 小米OJ 6.交叉队列 深度优先遍历解法

网上有用动态规划解这题的,代码量比较大.我这里用 深度优先遍历 写更简单一些.思路就是很常见的思路.具体流程:如果 s1[i] 和 s2[j] 都不等于 s3[i+j] , 说明无解 , 返回false.如果s1[i] 等于 s3[i+j] , 递归判断 s1[i+1] , s2[j] 和 s3[i+j+1] 的关系.如果s2[j] 等于 s3[i+j] , 递...

2020-03-21 20:54:05 201

原创 流程图 : MySQL带 change buffer 的数据更新过程

总体来说,MySQL通过change buffer和redo log减少对硬盘的随机读取,提高效率.

2020-03-10 01:33:57 466 5

原创 脑图 : MySQL的各种锁

全局锁:全局锁的典型使用场景是,MyISAM等数据库引擎做全库逻辑备份。InnoDB数据库引擎备份时只需开启事务,不用开全局锁,利用MVCC就能保证此过程中数据可正常读写.表级锁:表锁手动开启和关闭.元数据锁(MDL)不需要显式使用.当对一个表做增删改查操作的时候,加 MDL读锁;当要对表做结构变更操作的时候,加 MDL 写锁.行锁:InnoDB支持行锁,若事务A更新了一行数据,但事务...

2020-03-08 22:20:54 356

原创 Java 8 Stream的一些用法,持续更新中...

//int数组转set集合//1.转换成stream,2.包装,3.stream转SetSet<Integer> set= Arrays.stream(array).boxed().collect(Collectors.toSet());//错误举例,array元素需为包装类Set<Integer> set=new HashSet<>(Arrays....

2020-03-08 12:53:04 229

原创 SQL的USING()函数

SELECT * from book join borrow USING(book_id);SELECT * from book join borrow where book.book_id=borrow.book_id;这两条sql语句等价(但第二条语句会查出两个book_id列)using()函数的作用是简化等值连接....

2020-03-07 00:42:52 6266

转载 @Value在工具类中取到的值为null

转载版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/BeNiceman/article/details/78540920@Componentpublic class MailUtil {/** 日志 */private static Logger log = Logg...

2019-11-03 10:01:30 889

原创 layui动态添加的表单元素显示异常

这种问题发生的原因:layui会对表单内的元素进行二次渲染,动态添加的代码没有经过再次渲染,所以显示异常。官方文档其实也有提及这个问题和解决方法https://www.layui.com/doc/modules/form.html#render解决方法:动态添加元素后,使用form.render()手动触发渲染,如下代码所示:layui.use(['form'], funct...

2019-10-19 10:39:21 878

原创 一个Java线程间内存可见性实例的解读

代码来源public class TestVolatile { public static void main(String[] args) throws InterruptedException { ThreadDemo threadDemo = new ThreadDemo(); new Thread(threadDemo).start(); ...

2019-09-24 20:36:19 490

原创 基于Nginx-rtmp+Java的直播拉流鉴权方案

概述在之前这篇博客《无插件web直播解决方案》中,我汇总了一个可用的直播前后端解决方案。而这篇博客将针对该方案,讲述一种直播拉流鉴权方法。也就是一种验证用户是否有权限访问直播流地址的方法,可以用来防盗链。就当是记录自己的想法了。思路用户在web端登陆成功后,Java服务端将用户的id、密码,当前时间等信息合并成一个字符串,使用RSA算法公钥加密该字符串,生成一个密文key。把这个密...

2019-09-19 23:44:05 3616 5

原创 【入门】无插件web直播解决方案,ffmpeg+nginx-http-flv-module+flv.js

概述这几天一直在搭建一个web端的直播平台,需求是无插件,低延迟,开源免费。但是网上的教程,大多比较零散,没有整合成一套解决方案。所以搜索了很多资料,也问了不少群里的大佬。本篇博客是一个资源整合贴,也是一个避坑贴。最终选定的解决方案:ffmpeg推流——>nginx-http-flv-module流服务器——>flv.js前端播放器直播流协议:http-flv。优势...

2019-09-07 20:19:44 21153 38

原创 Java反射的作用及应用 笔记

Java代码在计算机中经历的三个阶段1.源代码阶段.java源码文件 ---》.class字节码文件2.Class类对象阶段类加载器 ---》Class类对象(反射机制)(Class类对象包括,成员变量Field[] fields + 构造方法Constructor[] constructors + 成员方法Method[] methods)3.运行时阶段Class类对...

2019-08-03 20:35:33 175

原创 出现2003 - Can't connect to MySQL server on 'localhost'(10038)的解决办法

MySQL相关服务未开启

2019-07-20 10:43:10 592

原创 LeetCode 1005. K 次取反后最大化的数组和 (Java-超越99.66%.详细解析)

题目给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。解题思路(1).K>0则执行(2),否则执行(4)(2).取数组A[]中的最小值,并取反.(3).K–.(4).对数组A[]求和注意点第(2)步取最小...

2019-05-23 20:33:40 201

原创 LeetCode 443. 压缩字符串

前言此题要求使用原地算法求解,即将压缩结果存在原chars[]数组中.使用双指针即可求解此题.这里我们称由相同字符组成的字符串为相同字符序列.指针t指示已压缩的结果的末尾,指针i指示未压缩字符串的开头.遇到相同的字符,指针i便向后滑动,直到遇到不同字符.指针i滑动的距离即为相同字符序列的长度.具体过程及解析如下:public int compress(char[] chars) { ...

2019-05-15 23:26:32 444

原创 Redis常用命令

文章目录有序集合`ZADD key score1 member1 [score2 member2]``ZINCRBY key increment member``ZRANGE key start stop [WITHSCORES]``ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]``ZRANK key member``ZREM key member [...

2019-05-11 14:47:04 105

《Java设计模式》刘伟 课后习题及模拟试题答案.rar

刘伟《Java设计模式》的课后习题答案,侵删。

2019-08-24

空空如也

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

TA关注的人

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