- 博客(194)
- 资源 (3)
- 收藏
- 关注
原创 Java并发编程-线程通讯
CountDownLatch 定义了一个计数器,和一个阻塞队列, 当计数器的值递减为0之前,阻塞队列里面的线程处于挂起状态,每次调用 countDown() 方法,计数器减1,当计数器递减到0时,会唤醒阻塞队列所有线程,这里的计数器是一个标志,可以表示一个任务一个线程,也可以表示一个倒计时器,CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。发送线程在获得锁后,等待一段时间后,将标志位设置为true,并且发送 Condition 信号。
2025-04-21 22:46:33
851
原创 Java并发编程-线程池
是一种并发编程技术,用于管理一组线程,以便复用这些线程来执行多个任务。使用线程池的核心目的就是用来减少线程的创建和销毁的开销,从而能提高系统的响应性能,同时线程池对线程的管理也能避免线程创建过多导致内存溢出。
2025-04-21 22:38:33
594
原创 CompletableFuture并行处理任务
通过显式传递 Executor,可以更精细地控制线程池行为。I/O 密集型任务(如网络请求、数据库查询)。需要隔离任务类型(避免公共池资源耗尽)。长期运行或阻塞任务。// 创建自定义线程池10, // 核心线程数50, // 最大线程数60L, // 空闲线程存活时间new LinkedBlockingQueue<>(1000), // 有界队列(容量 1000)new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略// 使用自定义线程池。
2025-04-21 22:15:47
1291
原创 Redis适用场景
通过将数据存储在内存中,Redis可以实现高速的读取和写入操作,极大地提升应用程序的性能。例如,在一个电子商务网站中,可以将热门商品的信息存储在Redis中,当用户访问这些商品时,首先从Redis中读取,如果Redis中没有,再从数据库中读取并更新到Redis中。在分布式系统中,Redis可以用于实现分布式锁,可以在分布式系统中协调多节点对共享资源的访问,确保操作的原子性。Redis最常见的应用之一是作为缓存层,用于存储频繁访问的数据,从而减轻数据库的负载。redis实现的分布式锁是不可重入的。
2025-04-15 22:43:49
1329
原创 SQL语句
数据定义语言 (DDL) – 定义和修改数据库的结构。数据操作语言 (DML) – 访问、操作和修改数据库中的数据。数据控制语言 (DCL) – 控制用户对数据库中数据的访问,并授予或撤销特定用户或一组用户的权限。事务控制语言 (TCL) – 控制数据库中的事务。数据查询语言 (DQL) – 对数据库中的数据执行查询以从中检索必要的信息。DQL:SELECT。
2025-04-15 22:23:41
1015
原创 HashMap 的实用技巧
Hashmap 的默认初始容量是 16,负载因子是 0.75。如果知道数据量较大,可以在初始化时设置初始容量和负载因子,以减少扩容次数,提高性能。computeIfabsent 方法可以在键不存在时动态计算值,并将其放入 Hashmap 中。entryset 方法返回键值对的集合,适合需要同时访问键和值的场景。keySet 方法返回所有键的集合,values方法返回所有值的集合。merge 方法可以合并键对应的值,特别适合用于统计或累加场景。replace 方法可以更新指定键的值,只有在键存在时才会更新。
2025-02-11 10:19:04
360
原创 Lua 初级教程
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
2025-01-24 18:01:19
1761
原创 Linux计划任务(crontab)
在 crontab 文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前 shell 环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在 crontab 文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了。如果不存在就创建一个。操作系统自带的cron 任务,系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件。
2025-01-21 11:03:14
1011
原创 MySQL Explain 指南
列出根据 where 或 group by 字段可能使用的索引,实际执行时未必会使用这些索引。索引字段的最大长度,单位为字节。对于联合索引,该值有参考意义。表示表行按条件过滤后的估计百分比,越高越好,最大值为100。显示查询使用的分区,有助于分析查询优化器选择的分区。预估需扫描的行数,值越小越好,范围越精准查找越快。索引列的等值匹配对象,主要用于性能分析。表示实际选择的索引。
2024-12-07 23:37:33
953
原创 Java工具--stream流
findFirst() 和 findAny() 都是获取列表中的第一条数据,但是findAny()操作,返回的元素是不确定的,对于同一个列表多次调用findAny()有可能会返回不同的值。使用findAny()是为了更高效的性能。如果是数据较少,串行地情况下,一般会返回第一个结果,如果是并行(parallelStream并行流)的情况,那就不能确保是第一个。使用 mapToInt() 求整数列表中的最大值、最小值、总和、平均值。使用 findAny() 和 findFirst() 获取第一条数据。
2024-09-29 15:45:59
1426
原创 Java工具--操作Redis
Jedis 的使用方式很简单。对象点方法就能操作Redis。Jedis里的方法和Redis指令都是同名的。String里的Redis需要自己写工具类,让后调用这个工具就能操作Redis。
2024-08-05 14:32:19
397
原创 自定义记录日志的注解
Target({@Target({import com// 请求路径 ServletRequestAttributes attributes =(ServletRequestAttributes) RequestContextHolder . getRequestAttributes();= null;// 拦截的实体类,就是当前正在执行的controller Object target = point . getTarget();
2024-08-05 10:48:32
387
原创 JavaScript获取当前时间
JavaScript获得时间戳的方法有五种,后四种都是通过实例化时间对象new Date() 来进一步获取当前的时间戳,JavaScript处理时间主要使用时间对象Date。通过 valueOf() 函数返回指定对象的原始值获得准确的时间戳值。Date.parse() 将字符串或者时间对象直接转化成时间戳。如果参数为一个字符串,将字符串视为日期的字符串表示,转换为日期。将时间对象转化为一个number类型的数值,即时间戳。Date.now() 可以获得当前的时间戳。Date对象字符串 (toString)
2024-07-07 21:25:15
3877
原创 MySQL数据库开发设计规范总结
从数据库的设计原则、命名规范等方面论述数据库设计的规范思想及命名规则。方便业务功能实现、业务功能扩展方便设计开发、增强系统的稳定性和可维护性保证数据完整性和准确性提高数据存储效率,在满足业务需求的前提下,使时间开销和空间开销达到优化平衡。
2024-06-04 22:32:12
1491
原创 Java注解
jdk中和注解有关的类都定义在java.lang.annotation包中注解本质上就是一个接口,该接口默认继承Annotation接口注解使用@interface来定义,例如:定义一个TestAnnotation注解访问修饰符必须是public 不写默认public参数类型必须是基本数据类型、String、Class、枚举类型、注解类型以及上述类型的数组,像Integer、Double这些(包装类型)都不行。参数名字一般定义为名词,如果只有一个参数,一般定义为value。
2024-05-10 20:40:45
745
原创 ArrayList数组去重
排序之后,如果相邻两个元素是相等的,那么就说明重复了。(但这个方法会改变数组原有顺序)由于HashSet不能保证添加顺序,所以只能作为判断条件保证顺序。如果不计较去重后的数据顺序,可以直接使用HashSet进行去重。
2024-05-10 11:18:40
488
原创 MySQL数据类型
M是小数位数(精度)的总数,D是小数点(标度)后面的位数。整数部分最大是3位,如果插入数12.123456,存储的是12.1234,如果插入12.12,存储的是12.1200.字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB。例如,定义为ENUM的列(‘one’,‘two’,‘three’)可以有下面所示任何值。M是小数总位数,D是小数点后面的位数。二进制数据(_Blob)
2024-05-08 19:32:06
1111
原创 jQuery的简单使用
('#myId') //选择ID为myId的网页元素$('ul.first') // 选择class为first的ul元素$('input[name=first]') // 选择name属性等于first的input元素$('a:first') //选择网页中第一个a元素$('tr:odd') //选择表格的奇数行$('#myForm :input') // 选择表单中的input元素$('div:visible') //选择可见的div元素。
2024-05-03 23:33:57
786
2
原创 数据库设计的三范式
数据库设计的三范式是一种规范和标准,它能够帮助我们构建高效、可维护的数据库结构。通过遵循第一范式、第二范式和第三范式的原则,我们可以减少数据冗余、提高数据一致性,并优化数据库的性能。在实际应用中,根据具体业务需求和数据特点,我们可以灵活地应用三范式,以达到最佳的数据库设计效果。
2024-04-28 14:01:49
662
原创 两位数乘法速算技巧
原理:设两位数分别为10AC10A+C10AC10BD10B+D10BD,其积为SSS, 根据多项式展开:S10AC×10BD10A×10BC×10B10A×DC×DS10AC×10BD10A×10BC×10B10A×DC×D而所谓速算,就是根据其中一些相等或互补(相加为十)的关系简化上式,从而快速得出结果。
2024-01-20 19:15:02
3497
原创 @Scheduled定时器
当任务开始时Spring就会给这个任务计时,5秒钟时候Spring就会再次调用这个任务,可是发现原来的任务还在执行,这个时候第二个任务就阻塞了(这里只考虑单线程的情况下,多线程后面再讲),甚至如果第一个任务花费的时间过长,还可能会使第三第四个任务被阻塞。每分钟的第十秒执行一次。比如第一次执行时间为2023-10-20 23:09:10,下一次2023-10-20 23:10:10,再下一次2023-10-20 23:11:10。上一次任务执行完毕时间点之后多长时间再执行,任务的执行要等上一个任务执行结束。
2023-10-21 22:50:45
1408
原创 Linux命令 -- 重定向
用 >> 表示追加,追加多个标准输入。结束的标志符一般用EOF(end of file),因为是自定义的,所以也可以用其他的。重定向输出符>,是1>的缩写。也就是说明它只会重定向标准输出,标准错误输出不符合,也就不处理。2>& 1 表示标准错误输出和标准输出绑定在一起。cat mo.txt ml.txt >> am.log 2>& 1 表示追加。用 2> 可将标准错误输入,重定向到文件中。重定向默认写入标准输出。对于标准错误输出,其内容默认不写入。0:标准输入,1:标准输出,2:标准错误输出。
2023-08-13 16:49:35
643
原创 Linux命令 -- vim
用vim指令进入文件。刚进入时是命令行模式,也叫一般模式。按i或者insert进入编辑模式,此时可以编辑文件内容。按esc可从编辑模式退回到一般模式,输入冒号进入底线命令行模式。
2023-08-13 14:20:29
745
原创 Linux命令 -- find
三个参数,分别是:a(访问时间 Access time),m(修改时间(内容) Modify time),c(变更时间(状态) Change time)
2023-08-13 14:07:52
268
原创 Linux命令 -- chmod
对于asd.txt文件,- 代表它是一个普通文件,- - x代表文件所有者拥有执行权限,- - - 代表与所有者属同一用户组用户的权限,- - - 代表其他用户的权限。也就是1+3+3+3,一共10个参数。-c 参数查看权限的变化,-v 查看现在拥有的权限。
2023-08-13 14:04:36
299
原创 二进制的运算
它也叫半加运算,就是数值相加之后不进位。比如二进制的1+1结果是10,进位为1再写0,如果不进位,那么1异或1就等于0。1与0的异或就可以直接看作是相加。类似于逻辑或运行,当条件只要有一个为true时,结果就为true。类似于逻辑与运行,当条件都为true时,结果才为true。异或运算,相同为0,不同为1。它在书本上的符号是这样的。
2023-08-03 14:37:36
1066
原创 POI使用教程
Apache POI是Apache软件基金会的开放源码函数库,POI提供API让Java程序对Microsoft Office格式的文档进行读写操作。
2023-07-30 14:49:15
1528
原创 MongoDB常用语句
当然 name 也可以用 true 或 false,当用 ture 的情况下和 name:1 效果一样,如果用 false 就是排除 name,显示 name 以外的列信息。skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。【student】表和【stuAdress】表关联,两表关联字段是userId相等,关联条件是userId等于2102123。查看当前在使用的数据库。删除当前使用的数据库。
2023-07-23 22:21:58
653
原创 用Python解析WIFI密码
也就是,电脑对于曾经连过的WiFi,不需要输密码就能直接连接。但是执行之后,这些WiFi都需要重新输入密码才能连。这个程序执行之后,会对本地连过的WiFi的配置信息进行清空。
2023-07-10 14:22:27
950
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人