自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 编辑距离算法增加编辑信息返回

【代码】编辑距离算法增加编辑信息返回。

2024-03-22 22:02:09 147

原创 Java设计模式——策略

前言策略模式是平时Java开发中常用的一种,虽然已有很多讲解设计模式的文章,但是这里还是写篇文章来从自己理解的角度讲解一下。

2024-02-12 21:08:44 1217 2

翻译 【译】如何构建高效的生产力软件

我认为理想的生产力软件就像拥有一个出色的助手或竞选经理:一个对你生活中待办事项列表和日程安排了如指掌的人,并且敢于告诉你必须结束这次会议,因为你答应孩子们你会在5点回家带他们去比赛。但是大多数人还在他们的项目管理软件中有任务项(修复这个错误),各种日历式的事件(和Jon吃午饭,赶飞机),以及大量的电子邮件(回复Jon的问题,修复frobnitz并向Bob报告等)。(亲爱的读者们,我想要的回答不是你最喜欢的升级版待办事项列表的一个API能让我编写所有需要的导入器以及我描述的任务建议系统的。

2023-12-25 22:52:25 130

原创 JPA通过Statement拦截器动态修改sql表名

前言jpa是通过对实体上注解表名的方式来绑定对象和数据库表的关系,并进行读写的。但有时我们会需要动态的读写表,比如同一张表带日期后缀名table_yyyyMM。本文介绍如何使用拦截器来达到这一目的。

2023-12-25 19:51:13 1326

原创 docker容器部署mysql并远程访问

记录一篇docker部署mysql的配置笔记,省的每次都去网上查了。2 进入mysql。

2023-12-17 17:09:30 364

原创 使用java获取nvidia显卡信息

前言AI开发通常使用到GPU,但通常使用的是python、c++等语言,java用的则非常少。这也导致了java在gpu相关的库比较少。现在的需求是要获取nvidia显卡的使用情况,如剩余显存。这里给出两种较简单的解决方案。

2023-12-16 21:57:04 942

翻译 【译】关于计件工作的辨析

例如,在丹麦,如果你的工作消失了,政府会直接支付你90%的旧工资,直到你找到新工作(当然,有一定的上限)。例如,程序员的生产力相差一个数量级——一个公司最好的程序员可能是最差的程序员的十倍——但我从未听说过一个公司的程序员薪酬相差接近这个程度。也就是说,不像公司会有一个年薪为120万美元的CEO和另一个年薪为1200万美元的CEO(实际上,我猜测CEO的的薪酬都是相同的)——相反,数量级的差距都是在不同公司之间出现的。现在,根据经典的经济理论,这些变化不仅仅是细节上的差异,而且会增加整体的蛋糕大小。

2023-12-10 17:06:48 66

原创 JPA与MySQL锁实战

意向锁是一个表级锁,一共有两种:意向共享锁和意向排他锁。主要的目的是表示当前表中某行记录正在被锁,或者即将被锁。事务在获取共享锁和排他锁之前,需要先获取对应的意向共享锁或者意向排他锁。表级锁和行级锁是允许共存的,但也有不能共存的情况,比如当有一行记录存在排他锁时,就不允许再存在表锁了。假设现在有一条记录被排他锁锁定,那么它会持有:该记录的行级排他锁,该表的意向排他锁。那么当另外一个事务想要将整张表锁定时,不需要挨个检查每个记录是否存在排他锁,只要检查该表是否有意向排他锁就可以达到目的了。

2023-12-06 23:47:41 365

原创 Java追加式将内容写入yml文件

前言最近需要使用java的jackson-dataformat-yaml写yml文件,但多数情况是在现有的文件内容中追加地写一部分新的内容。网上查了一下没有查到有直接追加的api,看源码偶然间找到了一个实现思路,记录一下。

2023-11-15 19:12:11 277

翻译 【译】长寿的秘密

这正是护士健康研究的背后理念,这是一个由哈佛大学开展的多十年项目,旨在收集有关营养的实证信息。这个研究项目的思路很简单:选取一个相当大的人群,他们处于类似的环境(护士),然后让他们每年填写一份包含两个问题的调查问卷:“你吃了什么?全麦面包含有更多的营养,更多的蛋白质等。而全麦面包消化更均衡。“可能是血液中糖分过高,使胰腺对胰岛素的需求增加,”研究作者解释道。(Eat, Drink, and Be Healthy)中所描述的,研究结果提供了一些简单的长寿建议。我是我所认识的最挑食的人,但我还能接受这些改变。

2023-11-09 19:28:14 66

原创 Graalvm-21 Windows初体验

前言除了最新新出的jdk21以外,oracle还推出了重磅的graalvm-jdk-21。这个graalvm可以把java代码编译为本地执行文件,就是把原来的jar包直接打成exe。并且使用打完的exe占用的内存资源更小,启动速度更快,非常适合云平台部署,只是打包的时间比原来长了很多。实际用的话我们仍然可以在windows平台开发,将开发好的程序放到linux平台打成占用内存小、启动速度快的可执行文件。下面来介绍一下在Windows平台下安装和编译本地程序的过程。

2023-10-28 21:21:36 1549

原创 使用Http Interface客户端解析text/html类型请求

前言Spring6和Spring Boot3的正式发布也有一段时间了,最低支持的java版本也是直接跳到了17。而且最近java21也出来了,作为一个javaer,你不会还在坚守java8吧?Http Interface是Spring6新推出的一个声明式http客户端,写法有点像Retrofit。最近也是在一个新的项目里引入了Http Interface,但是目前相关资料还是比较少的,碰到一些问题还是会花费些时间精力。

2023-09-25 21:39:23 961

原创 使用CPU本地部署一个大模型

前言不少人都想要部署一个自己的本地大模型,但是受限于昂贵的硬件资源只能作罢,即便是量化后的模型也通常要至少5G+(ChatGLM2-6B INT4)的显存。因此我们想到能不能使用CPU来进行部署,当然了,要接受比较慢的推理速度。下面介绍两个开源模型的本地CPU量化部署方案,前提当然是要会一点点。

2023-09-24 18:24:08 3246

原创 使用Java和ChatGPT Api来创建自己的大模型聊天机器人

什么是大模型?大型语言模型(LLM)是一种深度学习模型,它使用大量数据进行预训练,并能够通过提示工程解决各种下游任务。LLM 的出发点是建立一个适用于自然语言处理的基础模型,通过预训练和提示工程的方式实现模型在新的数据分布和任务上的强大泛化能力。LLM 旨在解决自然语言处理中的一些关键问题,例如文本分类、命名实体识别、情感分析等。LLM 由多个主要组件组成,包括图像编码器、提示编码器和掩码解码器。图像编码器主要用于对输入图像进行编码,以便将其转换为可供模型处理的格式。

2023-08-20 19:01:22 3029 1

原创 SpringBoot项目多模块打包部署Docker实战

我们好多程序员都只关注功能代码的编写,在一些运维工作上则显得略有不足。这篇文章通过介绍最常见的Maven管理的Spring Boot项目多模块打包部署Docker来介绍一下项目部署过程中操作流程和几个需要注意的点。文章假设读者有前面提到的技术点的前置知识,不过没有也没关系,所涉及到的点都比较简单。

2023-07-09 14:16:26 3122 8

原创 SrpiingBoot Test单元测试使用随机数据库

在编写的单元测试中,有时候我们希望直接连接到数据库来验证dao层的功能。但是由于环境问题,我们又不能直接在开发的测试数据库中去执行这些测试用例,因为可能会对其他的数据造成一些影响。此外,如果我们是在ci中跑这些单元测试,那么在使用库的过程中为了避免对其他并行ci造成影响,就要保证数据库的相对独立性。为了解决这些问题,我们可以在执行单测的时候新建一个数据库,并在单测结束时将这个数据库删除,并且数据库名使用随机生成的字符串。下面来介绍如何在SrpingBoot Test的基础上实现上述的要求。

2023-06-12 20:45:32 637

原创 go语言基础——函数、结构体、接口

其中type关键字的作用是,表明后面一个东西是一个类型,是什么类型呢?struct类型。这个类型叫什么名字呢?People。当然了,还可以在PeopleStudent结构体中有一个People结构体,除此之外,还包含了一个StudentId字段。这个例子也多少有那么一点继承的味道吧。

2023-06-05 22:47:28 671

原创 go语言基础——概述、指针,基本数据结构

本篇文章站在一个Java程序员的角度来认识Go语言。在介绍标题所提到的三部分内容之前首先来看一下语言的整体结构,以经典的“Hello,World!”为例:package mainimport ( "fmt")func main() { fmt.Println("Hello, World!")}引入报名是使用的关键字package,每一个.go文件都必须在首行指出属于哪个包,并且每一个Go程序都要包含一个main包。引入包使用的是关键字import,后面跟小括号(),在里面

2022-05-03 20:33:36 895 1

翻译 【译】如何提高工作效率——HOWTO: Be more productive

如何更有效率“你已经看了这么长时间的电视了,”他对我说,“你现在可以写小说了吧。”这种想法让人很难挑出来毛病——写小说相比看电视来说毫无疑问是更充分的利用了时间——是不是有个隐藏的前提呢?这种想法的言外之意是时间是“可替代的”——花在看电视上的时间可以轻而易举替换为写小说。很不幸,事与愿违。时间可以分为不同的质量等级。如果我去地铁站的路上发现忘了带笔记本,那对我来说再写几页东西就太难了。而且在你经常被打扰的情况下是很难集中注意力的。还有一个心里因素:有时候就觉得很开心而且有动力随时准备找点事做,但有时候

2022-03-02 20:30:38 1429

原创 WSL操作指南

什么是WSLWSL的全称是Windows Subsystem for Linux(适用于Linux的Windows子系统)。WSL和WSL2下图是微软给出的比较。另外,在Windows 11中WSL 2能过访问GPU,这意味着可以使用一些Linux GUI程序,同时使得使用机器学习、人工智能和数据科学等应用场景更加方便快捷。总之,多数情况下,使用WSL 2是一个更好的选择,除非一些情况。你的项目文件必须存储在 Windows 文件系统中。你的项目需要访问串行端口或 USB 设备(WSL

2022-01-15 19:36:11 11932

原创 Golang连接PostgreSQL基本操作

前言:本篇文章对如何使用golang连接并操作postgre数据库进行了简要说明。文中使用到的主要工具:DBeaver21、VSCode,Golang1.7。以用户,文章,评论三个表作为例子,下面是数据库建表sql:CREATE TABLE public.user_info ( u_id serial4 NOT NULL, user_name varchar NULL, create_time date NULL, CONSTRAINT user_info_pk PRIM

2021-12-21 20:42:08 11013 4

原创 Golang实现类似静态变量效果的写法

go语言是没有静态变量的,但是在实际过程中往往需要类似的效果,比如配置信息等。下面这种写法以读写用户名(username)为例实现了类似静态变量的效果。首先看main.go中调用的写法://在main函数中set好username的值,然后在其他函数中获取username的值//main函数中进行set操作func main() { config.WithConfig().SetConfig() initApp()}//该方法进行get操作func initApp(){ config.

2021-10-13 14:51:22 2431

原创 go mod无法自动查找依赖包并下载(go 1.16)

开启go mod在使用命令go mod init your-project初始化go mod时要确定自己的go环境是否已经开启了go mod的功能。使用命令go env查看环境配置,检查GO111MODULE的参数值,如果是off则使用一下命令来启用:go env -w GO111MODULE=on。其中on代表命令行会一直使用moudle而不会去GOPATH目录下寻找依赖包。auto代表根据当前目录决定是否启用moudle功能。修改代理地址由于go语言是Google公司开发的语言,因此在访问一些网

2021-09-11 17:32:35 2921

原创 源代码阅读技巧的总结

前言:这一段时间接触了新的项目,要在此基础上进行功能的修改。不可避免的需要梳理代码,过程比较痛苦,于是在浏览了几篇优秀文章的基础上加上自己的理解总结出几个阅读代码的技巧。预先对程序实现进行分析这是一个在真正读代码之前的技巧,就是先对程序的实现进行假设分析。微软官方现在有了必应每日壁纸,功能就是每天更换最新的图片作为壁纸。我们以此为例对功能进行分析:更换壁纸是操作系统级别的操作,需要win api的支持。每日图片可以在浏览器里找到添加定时任务下载。读之前想象一下自己要写的话该怎么写,再读源代码的时候就有据

2021-08-18 19:37:15 816

原创 Deepin下载Wireshark并添加执行权限

apt下载wireshakr:sudo apt install wireshark安装完成后打开会提示权限不足,添加权限:sudo chmod 775 /usr/bin/dumpcap775最高权限/usr/bin/dumpacp是提示权限不足的文件

2021-03-13 13:31:05 488

原创 理解Spring的依赖注入(DI)和切面编程(AOP)

依赖注入和面向切面编程是Spring框架的两个核心特性,理解这两个特性对于我们理解整个Spring框架会有很大的帮助。对于初学者来说,这两个概念往往让人望而生畏,但实际上它们的基本原理并不复杂。依赖注入在规模稍大的系统中,往往会出现许多类进行相互调用来完成目标功能。我们以司机类和驾驶类为例,按照传统写法应当是司机类中调用驾驶类的方法。而通过依赖注入的方法将驾驶类注入到司机类中则可以避免司机类中直接创建驾驶类对象。假设有如下代码来实现司机驾驶汽车前进功能:public class Pilot impl

2021-03-10 13:55:14 1113

原创 Linux(deepin)网络开启后执行python脚本

脚本文件需要联网后执行,并且希望每次联网后自动执行,因此需要进行设置。在/etc/network/if-up.d文件夹下打开任意一个文件,比如openvpn文件。然后在其中添加自己的内容即可。#!/bin/shOPENVPN=/usr/sbin/openvpnOPENVPN_INIT=/etc/init.d/openvpnSYSTEMCTL=/bin/systemctlSYSTEMD=/run/systemd/system下面这一行是我要执行的脚本python3 /home/angelh

2021-02-01 11:25:18 441

原创 Linux文件名踩坑记:FileNotFoundError

今天用python做了一个爬虫爬取图片,用日期命名,日期格式为%m/%d,看上去是不很合理,很合乎逻辑。可是在文件写入的时候却反反复复地报错:FileNotFoundError: [Errno 2] No such file or directory: '01/30.jpg'当时我并没有想到是文件命名错误,而且由于代码中还有其他模块,就以为是其他部分写错了,查阅了相当多的资料,耗费了相当多的时间却没有解决。直到查看一篇博客,里面有一句话说:文件未发现错误:没有这样的文件或目录。可知,该文件夹的名称

2021-01-30 19:38:37 2107

翻译 Python基础进阶(前言)

前言你好,世界!作为一个年轻的程序员和90年代后期的黑客爱好者,我经常认真阅读最新一期的2600:黑客季刊。有一天,我终于鼓起勇气参加了杂志社在我所在城市举办的每月一次的聚会,惊叹于其他人看来是多么厉害。(后来,我意识到他们中的许多人的自信程度要高于实际水平。)整个会议我都在点头同意其他人说的话,努力跟上他们的谈话。我离开了那个聚会,决心把醒着的每一个小时都花在学习计算、编程和网络安全上,这样我就可以参加下个月聚会的讨论。在下一次见面会上,我继续只是点头,仍然觉得比其他人要笨。所以我再一次下定决心要学习

2021-01-25 18:55:04 261 1

原创 TP—Link路由器进行WDS无线桥接设置方法

前言家里一台设备需要联网,但是与路由器的物理距离较远且不能使用wifi,于是想到使用WDS无限桥接来解决。解决过程中在网上查了许多方法,没有一篇文章就能解决的,遂记录一下解决办法。网络拓扑我再阐述一下使用的场景:一台设备需要联网但只能使用网线,与路由器的物理距离较远(不方便拉扯网线)且不便移动。使用无限桥接将另一台路由器放在该设备附近,联通网线即可上网。先看一下拓扑图:无限桥接的基本原理可以理解为从路由器(B)无线接收主路由器(A)的网络信号,从而使自身成为主路由器(A)的扩展。家中有信号接收

2021-01-08 13:52:11 4375

原创 Java泛型原理简析

Java泛型被许多人称作一颗语法糖(添加某种语法,以增加程序的易读易写性),是因为它C#相比只能算是“伪泛型”。为什么这么说呢?泛型到底是什么呢?写程序的时候经常会用到数组,可以用数组来存放一个数据集合。如果让你数组存三个数——1,2,3,相信你很快就能写出代码: int[] arry = new int[3]; arry[0] = 1; arry[1] ...

2019-11-16 18:30:03 194

原创 C#多线程编程:Thread类和线程池详解

我们在写程序的时候经常会用到线程技术。简单理解,线程就是可以让程序同时做两件事。比如我们看直播,能在看视频直播和弹幕滚动能同时发生。如果单线程在直播的时候是不能发弹幕的,发送弹幕则不能直播。c#创建和使用线程是利用System.Threading命名空间下的Thread类,下面来介绍一下线程的概念以及如何使用。Thread类我们利用Thread类的方法可以实现线程的操作,比如创建、启动、终止...

2019-10-24 13:04:14 573 3

原创 Java正则表达式介绍及应用

我们经常会需要编写代码来验证用户输入,比如输入是否是一个数字,是否是一个邮箱等等。编写这类代码一个简单有效的做法就是使用正则表达式。正则表达式是一个字符串,用来描述匹配一个字符串集合的模式。我们可以使用正则表达式来匹配、替换和分割字符串。匹配字符串先说一下String类中matchs方法:乍一看,matches方法很像equals方法。"Test".matches("Test"); //...

2019-10-18 11:17:35 212

原创 Android从模拟器卸载app后再次从androidstudio启动报错Error: Activity class {com.xx}does not exist in react native

用android studio写android程序的时候,无()意()间把要调试的app从模拟器卸载了,然后再点as的绿色三角却怎么也运行不了,并给出了这样的Error:asd

2019-09-26 09:02:33 670

翻译 Cracking Codes with Python—翻译(第十章:加密和解密文件)

今天下小雨,有丶凉快。

2019-09-11 22:53:08 257

翻译 Cracking Codes with Python—翻译(第九章编写测试程序来测试程序)

在推特上问了问作者带佬版权的问题,带佬并没有理我。。。开学啦,打算这个学期结束前把全书翻译完,emmmmmm同学们加油学习啊!

2019-09-04 08:31:50 185 2

原创 Java基于TCP协议实现多线程聊天室

这篇文章实现了乞丐版的聊天室。用到的主要技术有线程和TCP,一共有三各类:服务器Server,服务器线程类Worker,客户端Client。话不多说,直接看代码。Server.javaimport java.net.*;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ConcurrentH...

2019-08-01 17:11:21 468

原创 Java中如何调用python代码

最近python十分流行,而java也是同样一直火爆。这篇文章介绍如何在java代码中嵌套python代码。既然是两种语言,那么肯定是不能写一段java代码,然后写一段python代码就执行了。java是运行在jvm上的(此处不深入讨论,有兴趣的同学可以参考别的文章。可以粗犷地理解成java代码运行时,计算机产生了一个“机中机”(jvm),而代码实则是在此“机中机”上运行的)。所以我们想到,不妨让...

2019-08-01 16:20:41 1777

翻译 Cracking Codes with Python—翻译(第八章:破译转位密码)

现在发布翻译文章还得勾上原文允许翻译或者本次翻译已经获得原文作者授权 这个东西了,这咋整。。。

2019-07-31 22:02:56 252

翻译 Cracking Codes with Python—翻译(第七章:使用转位密码加密)

这一章有点小多,然后对于新手来说,涉及到的新概念也很多。因为之前的翻译都比较快,所以有的地方可能并不是翻译的很好,读起来很别扭。从这一章开始会放慢速度,然后尽量把这些内容让人能读的通顺。...

2019-07-20 16:46:32 202

charles-4.2.8替换jar包

charles_4.2.8替换jar包

2019-04-03

空空如也

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

TA关注的人

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