JavaShutDownHook介绍和使用
概述:之前有了解过Java的ShutDown Hook机制,但是因为没有使用场景也没有深入学习,最近刚好又看到ShutDown Hook的一些东西,想着学习总结一下,做下学习记录。Java的Shutdown Hook是一种机制,允许开发者在Java虚拟机(JVM)即将关闭之前执行一些清理或终止操作。Shutdown Hook提供了一个钩子,允许开发者在JVM关闭时捕获到关闭事件并执行相应的逻辑。以下是一些使用场景:
资源释放和清理:当应用程序结束或JVM关闭时,可以使用Shutdown Hook来释放和清理打开的文件、网络连接、数据库连接等资源。这确保资源在程序终止之前得到适当的关闭,避免资源泄露和数据丢失。
日志记录和统计:Shutdown Hook可以用于记录应用程序的关键统计信息或生成最终的日志报告。通过在JVM关闭前执行这些操作,可以捕获应用程序在运行期间的关键数据,并生成相应的日志记录。
缓存刷新:如果应用程序使用了缓存机制,可以在JVM关闭前使用Shutdown Hook来刷新缓存,将缓存中的数据写回到持久化存储或其他目标中,确保数据的持久化和一致性。
任务终止和状态保存 ...
postgresql清理表空间
前言最近在用postgresql查询数据的时候,发现有个表的查询一直很慢,这里暂且取名A表,但是数据量并没有特别大,才几万的数据量,而且发现跟这个表同schema的数据表有个几千万的,但是查询都比这个A表快很多。后来查找了一系列资料发现,是A表占用的空间太大,会影响查询的性能,使用命令查看发现大概有4G左右的磁盘查勇,而几千万的那个表占用空间才几百M,于是使用命令清理了A表的磁盘占用,处理完之后就几十M的空间,而且查询变得很快。
处理步骤1.查看表占用空间大小pg里面查看表空间大小有好几种方式,如下:
1.1 \dt+ 命令这是 psql 命令行中的命令,可以列出所有表及其大小信息, 如:
12345postgres=# \dt+ t1 List of relationsSchema | Name | Type | Owner | Size | Description --------+--------------+-------+-----------+-------+-------------public | t1 | table | p ...
spring创建bean流程
1.spring创建Bean流程
提前定义好bean的描述信息(xml等文件)-> 抽象接口 (定义”读取”配置文件的规范,有各种格式比如xml yaml等, 实例 BeanDefinitionReader)-> Bean的定义信息 (实例 BeanDefintion) 中间有BeanFactoryPostProcessor:可以用来处理BeanDefinition的信息,比如PlaceHolderPostProcessor, 来处理占位符的使用,比如${jdbc.username}这样的-> 实例化Bean BeanFactory使用反射创建Bean 实例化:在堆中给开辟一片空间,属性都是默认值
-> 填充属性
-> 初始化Bean, 执行init方法 初始化:给属性赋上初始值 - 分类: - 填充属性:赋值操作 - 调用具体的初始化方法
-> 生成完整的Bean对象
2.AOPAOP
从红绿灯语音播报说开去
国庆期间回到老家,一次过马路的时候发现十字路口的红绿灯红绿变换的时候竟然还有语音提示,而且这个提示挺久的。基本上就是红变绿以后,一直会有一个语音提示,“现在是绿灯,请快速通行”,类似这样的提示。杭州这边只在老余杭那边有遇到过类似的红绿灯语音提示,当时我就在想,为什么会有语音提示呢?红绿灯变化的时候,根据看到的灯的颜色和马路上的通行情况,做出是否过马路的决定不是很容易吗?语音提示不是显得很多余吗?当时也没多想,就觉得这个设计很多余,还浪费电呢。  之后有一天,我正在刷知乎,看到了一篇回答,是之前关注过的一个公众号博主写的,问题的标题大概是“100个中国人中就有一个盲人,为什么平时很少见到他们?”。然后我觉得这个问题很有意思。不过对于这样的问题,咱们要保持理性,先确认是不是,在确认为什么。因为我也是头一次知道中国的盲人大概占比是百分之一,然后我也去确认了一下这个数据,网上给出来中国盲人的数量大概是1700万,那么粗略的算,确实是百分之一左右。那么说来这个提问的前提一百个人就有一个盲人是真实存在 ...
前言
ChatGPT 简介:突破性的 AI 语言模型
前言最近bing集成ChatGPT,让微软股价大涨,又带火了一波ChatGPT,今天我们也蹭一波热点,介绍下ChatGPT。
示例1:先展示一下我之前跟chatGPT聊天的记录,和一般的聊天机器人相比,还是比较智能,又比较有趣的。
一开始以为只能用英文聊天,后来发现了可以中文聊天,还能角色扮演。
这里发现它不太智能的地方了。竟然说吕布的武器是西游记,我指出它的错误,它又继续犯错,还说西游记是武器,给我整不会了。
它还会英语套话,笑死。
示例2:下面的列子是chatGPT生成的,我跟它说了写一篇介绍chatGPT的文章,然后从大致几个方面来介绍。
近年来,人工智能取得了令人难以置信的进步,最令人兴奋的发展之一是创建了大型语言模型,例如 ChatGPT。 ChatGPT 由 OpenAI 开发,是一种基于 transformer 的语言模型,经过海量数据训练,可以根据提示生成类似人类的文本。 在本文中,我们将探索 ChatGPT 是什么、它是如何工作的以及它可以做什么。
什么是ChatGPT?ChatGPT 是由领先的人工智能研究 ...
富爸爸提高你的财商
富爸爸提高你的财商
1.1971年的布雷顿森林体系瓦解
2.1974年的美国养老金制度修改
人口老龄化加速,搭建“三支柱”养老体系。1)1942年进入老龄化社会。2018年,65岁以上老人占比为16.03%,老年人口占比提升1个百分点用时仅2年。2)搭建“三支柱”养老体系。自1935年《社会保障法》后,美国逐步形成以公共养老金(OASDI)、雇主养老金计划(DB及DC)及个人养老储蓄计划(IRA账户)的“三支柱”养老体系。3)第二、第三支柱占比超过80%。第一支柱的规模占比自2000年来维持在10%左右;第二支柱占比约为55%;第三支柱占比接近30%。
虽然书中讲的是美国发生的问题,但是按照我们现在的国情来看,我们国家也正处于这一时期上。人口老龄化比例严重,原来的职工养老金制度已经没法完全覆盖老年人了,所以我们也像美国一样弄了个人养老金制度。所以我们看看美国的个人养老金最后发展成怎么样了,对我们的个人养老金也有一个参考。
用Typora,PicGo和OSS实现自动上传图片
前言:以前写博客要发布到好些个平台,我是将图片一张张上传到每个平台,后来发现是真的麻烦,上传图片花的时间太多,极大的降低了我写文章的积极性。
后来改进为使用oss,把博客的图片都上传到oss上面。然后使用oss返回的图片url,这样我的文章里面的图片只上传了一次,最后把整篇文章的mardown复制到各个平台上,平台一般都会把markdown的文章中的img标签的图片上传到他们自己的服务器,然后把图片打上平台的水印,然后把原图片链接替换掉。这样图片值上传了一次,剩下平台上的图片都是平台解析markdown的图片url自己处理的,不需要我们在花时间去上传图片了。
写了一段时间,还是觉得上传一次都觉得是在浪费生命(科技是第一生产力,但是懒惰是第一需求力啊),于是又找了找,还有更加方便的方式吗?我直接截图就自动上传,不用我再传一遍的省力方式?
最后是使用typora+picgo+oss解决了问题。
简单说一下我尝试的其他方式的过程,首先我们用的编辑文章的编辑器要支持直接放截图,并且能上传截图,找了找发现以前用过的typora是完美的符合需求的编辑器,但是发现以前的版本比较低,去官网重新下载了最 ...
给微信公众号接入聊天小助手
前言:之前chatgpt很火,那个时候看到有博主把chatgpt接入到微信上,就想自己是不是也可以弄一下,这样可以让没用过chatgpt的人也玩一玩。今天就去研究了下,发现问题很多,体验还不好,最后还是放弃了(主要是懒)。
微信公众号对响应时间有限制,而且也限制了chatgpt的使用,可能会封号。而且因为国内无法使用chatgpt的服务,必须还弄一台国外的服务器,在通过微信公众号后台去对接下,感觉比较麻烦就放弃了。
不过,用不了高智能的聊天机器人,弄个不那么智能的机器人放到微信公众号还是可以吧?
我就去网上找了找资料,发现两种比较好的方式。
1.微信公众号就有相应的聊天机器人,小功能还挺多,直接对接一下就可以用
2.WELM是腾讯开放的一个自动补全的AI,可以用来续写文章之类的,也可以提供上下文实现聊天功能
今天要讲的就是第一种方式,直接使用微信对话开放平台的聊天机器人。
步骤:1.首先进入到微信对话开放平台的网址,并且扫码登录
2.点击配置机器人
3.点击左边的【对话配置】-【预置技能】
4.把你觉得会用到的技能给点上,技能下面的小绿点右边的文字就是触发该技能的咒语
只要和机器 ...
LeetCode-396周赛记录
LeetCode-396周赛记录
Q1:https://leetcode.cn/problems/find-the-k-or-of-an-array/description/
这个第一题倒是不复杂,但是问题是这个文字描述太绕了,根本就没搞清楚它是要干嘛。弄清楚题意之后,翻译成将nums中的每个元素里面找出二进制位数是1的,如果某一位上1的数量达到了k,就记录下来,最后求得值就是这几位为1的元素,转为二进制的和。比如示例一给的是,第0,3位是满足了有k个1,就计算2^0 + 2^3 = 9。后面的示例二和示例三可以忽略,简直是用来误导人的,让你搞不明白到底是要算&还是|。因为nums[i] < 2^31所以遍历到30位就行了。
位运算的操作可以看下灵神的文章:分享|从集合论到位运算,常见位运算技巧分类总结!
12345678910111213public int findKOr(int[] nums, int k) { int sum = 0; int[] count = new int[31]; for (int i ...
差分数组
差分数组
前言:有的时候我们需要对一个数组范围进行多次批量操作,在数组长度很小的时候,直接遍历数组进行操作就可以了。但是当数组长度很大的时候,批量操作很多次效率就会很低,有没有什么快速的方式可以完成这样的操作呢?就是今天要讲到的差分数组了,可以只操作少量的元素来完成批量操作。
介绍差分数组是在原来的数组上进行用两两作差构造出来一个长度一样的数组(当前的元素减去前面的元素),叫做差分数组,后续操作就可以在差分数组上完成。
原数组:[ai…an]
差分数组:[a(i), a(i+1) - a(i), a(i+2) - a(i+1)….a(n)- a(n-1)]
diff[i] = \left { arr[0], i = 0 \ arr[i] - arr[i-1], i >=1 \right }
差分数组的性质:
性质1:diff[]从左往右累加a[i] = d[i-1] + d[i],可以得到原数组。
性质2:原数组区间累加/减(a[i],a[i+1]…a[j])等于差分数组 d[i] + x并且d[j+1] - x。
特殊情况: ...