- 博客(40)
- 资源 (1)
- 收藏
- 关注
翻译 【转载翻译】2024软件开发趋势Top15
当我们步入2024年,软件开发领域在技术创新和市场需求变化的推动下继续以指数级的速度发展。对于企业和开发者来说,了解这些趋势不仅有益,而且对于保持竞争力和成功至关重要.
2024-02-04 22:17:18
137
原创 大模型初体验-阿里云百炼初级入门demo
阿里云百炼() 是一站式的企业专属大模型生产平台,基于通义基础大模型,提供企业专属大模型开发和应用的整套工具链。面向对象:客户及ISV的研发/技术人员核心能力:支持大模型训练和微调服务形式:通过API服务输出给客户,方便客户进行集成和使用专属大模型能力应用编排:支持客户打通自己的业务能力API,使得客户可以将专属大模型能力结合进入自己的业务链路本文仅仅是非常简单的尝试,云百炼功能非常强大,欢迎大家一起使用。支持非常多的应用支持多种模型(官方大模型和第三方大模型)支持自己训练模型(
2023-11-01 23:01:49
4660
原创 当数据库写入流量突增,阁下该如何应对?
最近遇到了一个比较有意思的问题,这里简单探讨一下解决方案。业务有一个系统,管理了非常多的IOT设备,设备每隔30S会通过HTTP方式汇报心跳到服务端,然后服务端更新数据库记录,用于后续的设备监控使用。通常情况下,设备间的启动时间实际是有差异的。从时间维度上看,分布会比较均匀,落到数据库层面的流量分布也是相对均匀的。但是某一天,设备依赖的第三方服务有变动,导致设备集体重启。重启后的设备,在同一时刻上报心跳的并发度增加,进而导致数据库压力剧增。
2023-09-25 22:04:02
193
原创 脚步不停歇,道阻且长,行之将至
公司总会有业务的调整,而自己也会随着业务调整不得不做出一些改变。过去的半年,偶尔会找不到努力的方向。每到需要总结的时候,也总会感叹是否又荒废了时光。在即将快35岁的年纪,发现需要重新审视一下自己,让自己能有进一步的提升,保持足够的竞争力。
2023-09-09 11:42:10
208
原创 Java线程池UncaughtExceptionHandler无效?可能是使用方式不对
推荐的处理方式推荐try-catch对线程任务进行异常捕获推荐自定义ThreadFacory,并自定义UncaughtExceptionHandler进行异常打印,避免有一些异常捕获遗漏的情况。当然此场景下,一定要区分submit和execute任务提交方式。
2023-08-22 23:04:53
385
原创 记一次Apache HTTP Client问题排查
当我们使用HTTP Client的时候,需要结合业务需要合理设置connect timeout和 socket timeout参数。当进行问题追踪时,需要利用HTTP和TCP的一些知识,以及tcpdump等抓包工具进行问题验证。
2023-07-27 22:38:57
1542
原创 大意了,误用了MyBatis的$符号
近期有一个小业务需求,非常简单,本质就是增加几个过滤参数,可以透传给数据库就可以了。代码使用MyBatis作为ORM框架原始SQL如下上面没有过滤条件,本次改造是增加client_type的过滤,由于可能存在多个client_type,故需要使用MyBatis的foreach用法构造in条件。当时偷了个懒,直接从现有代码库里面copy了一份做了改动。自以为应该没有问题,就屁颠屁颠的部署服务到预发环境了,结果报错了。奇怪,怎么会把android当做了列呢,这明明是查询条件才对。
2023-04-24 15:44:58
649
原创 线上代码不符合预期?不妨试一下反编译
本周上线发布了一个小功能,功能很小,就是增加了一个if判断,可以简单理解为下面的情况。这段代码相当简单,但是线上运行时,偶尔会发现返回不符合预期。
2023-03-25 19:32:58
463
原创 无法使用@RequestBody?那就使用HttpServletRequest吧
从代码上看,如果项目是基于SpringBoot的,那么可以完全没有问题。但是本次对接的项目历史悠久,还没切换到SpringBoot框架,所以只能寻求解决方案。
2023-03-25 19:29:59
513
原创 《代码整洁之道-程序员的职业素养》读书笔记
本书是Bob大叔的著作,关于本书Bob大叔这样描述这本书主要阐述软件开发者的专业精神,书中包含很多实操性的建议。
2022-06-21 07:16:51
1395
原创 SpringBoot下实现Shutdown Hook的几种方式
在应用中,经常希望在JVM关闭时做一些清理的动作,本文陈述几种常用的实现方式。1、JVM自带的shutdownHookRuntime.getRuntime().addShutdownHook(new Thread(() -> log.info("shutdown hook, jvm demo")));特点: jvm自带,使用方便,多个钩子间是并行执行的。2、监听Spring的ContextClosedEvent关于ContextClosedEvent等事件描述,可以参照以下示例(内容来自S
2022-05-18 20:22:42
5922
原创 一次Nginx 502问题解决
问题背景线上某个web应用页面,偶发性的报502 Bad Gateway异常。线上环境是Nginx反向代理和SpringBoot的后端服务组合。针对这个问题,记录一下解决过程。环境准备如果环境是Mac并且已经安装了Homebrew的话,安装Nginx还是非常方便的。brew install nginxMac Homebrew安装指导https://www.jianshu.com/p/ebd854196c4c如果已经安装过了Docker环境,则更为便利,直接运行一个Nginx镜像即可。Hom
2022-03-05 14:59:23
2847
原创 clean code的一些总结
前段时间在B站偶然发现了一个关于讲Clean Code的课程,非常不错,对我自己很受用。所以针对课程的内容,同时结合自己的一些经验,总结了一些关于Clean Code的内容。作者视频中使用的语言是Javascript/Typescript,代码示例比较容易,而且Clean Code很多理念是语言无关的,大家可以放心.
2021-12-15 07:30:56
942
原创 记一次SpringMvc下HTTP 406问题排查
问题背景由于项目需要,需要将某个SpringMvc的Rest接口响应修改为json类型,结果发现原来正常的请求会报HTTP 406,这里记录一下追踪的过程。先简单介绍一下HTTP 406。HTTP 406 (Not Acceptable)The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request.Ac
2021-11-15 22:28:52
1323
1
原创 java获取文件最后一行的几种方式
当我们在读取文件的时候,通常都是从前向后读取,那如果要读取文件的最后一行内容,要如何操作呢?顺序遍历读取,直到文件最后一行public static String readLastLineV0(File file) { String lastLine = ""; try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) { String currentLine = ""; whil
2021-10-04 09:42:08
8480
原创 Linux服务器如何获取出口ip
本周因为工作需要,需要获取服务器对应的出口ip,这里对获取方式做一下记录。Linux下如何获取机器的出口IP这里机器都可以访问到外网情况下,否则的话获取出口IP就没有什么意义了。方式一curl cip.ccIP : 111.xxx.xxx.89地址 : 中国 北京运营商 : 联通数据二 : 北京市 | 联通数据三 : 中国北京北京 | 联通URL : http://www.cip.cc/111.xxx.xxx.89可以看到该请求方式获取到的信息非常详细,包括出口ip、包括运
2021-09-04 16:43:42
7744
1
原创 记一次SpringBean误用引起的线上并发问题
问题背景之前和同事一起负责一个新上线产品登录模块,开始的时候处于小流量试运行,没有什么问题。突然从某天开始,部分用户报登录校验失败。该问题排查了很久,最终定位到是并发问题,这里回顾一下。出现问题的关键代码AuthParams@Data@Componentpublic class AuthParams { /** * 用户code */ private String code; /** * 用户密码 */ private
2021-08-01 23:07:33
310
原创 java实现固定大小队列的几种方式
最近团队有同学在开发中,遇到一个需求,统计最近10次的异常次数,咨询有没有类似的list。针对这个问题,记录一下几种处理方式。基于Hutool中的FixedLinkedHashMap引入maven依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.0</version>
2021-07-12 21:48:01
1830
原创 spring session初次体验
最近团队一个项目需要使用Session,之前没有在实际项目中使用过Spring-Session,这里记录一下使用的过程。SessionHttp协议是无状态的,这样对于服务端来说,没有办法区分是新的访客还是旧的访客。但是,有些业务场景,需要追踪用户多个请求,此时就需要Session。关于session的百度百科sessionSession:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Sess
2021-06-14 17:44:54
280
1
原创 对Spring PostConstruct注解的一点新认识
无论是Spring还是SpringBoot开发中,PostConstruct注解的使用频率还是比较高的,通常用于Bean初始化完成的一些动作。在项目代码中,会将配置从配置中心中读取,然后初始化到指定的Bean中。其他需要动态获取配置的地方,直接依赖注入这个Bean即可。示例代码如下:ApplicationConfig动态配置所在的类,主要是属性。@Configuration@Data@Slf4jpublic class ApplicationConfig { /** * c
2021-06-06 17:06:47
178
原创 Spring-RestTemplate常用方式使用汇总
当使用SpringBoot时,如果需要调用第三方Rest API,通常会使用RestTemplate。有时候偶尔搞不清楚参数要如何传递,明明参数已经赋值,对方接收到的确是空值。本文对经常使用的方式,做一下汇总。准备工作请求对象@Data@AllArgsConstructor@NoArgsConstructorpublic class Person { private Long id; private String name;}第三方请求@RestControllerpubl
2021-05-15 17:55:37
245
原创 spring-security关闭登录框
事情要从同事的一个项目说起,项目中需要集成公司的单点登录系统,但是无论如何都无法跳转到正常的登录页面。相反,却始终跳转到另外一个登录页面。但是代码却非常简单,简化一下@Controllerpublic class SecurityTestController { @GetMapping("/myLogin") public String login() { return "login"; } @GetMapping("/") public String homePag
2021-05-09 18:52:43
6164
2
原创 关于fastjson的知识又增加了
本周有一个需求,需要调用第三方的阿里云接口,对方要求的协议参数,必须首字母大写。而通常情况下,我们定义Bean的时候,不会直接将变量名设置为大写开头,这样不符合编码规范,那有什么办法可以将首字母序列化为大写的字符串,作为请求参数传递呢?这里主要通过FastJson的一些定制化行为,完成了该类需求。同时,在这个过程中,顺便阅读了一些fastjson的源码,特此记录一下。序列化@Datapublic static class Model { private int userId; private
2021-04-24 17:51:36
566
原创 spring-boot-validator使用汇总
在写业务代码时,对参数的校验必不可少,基于Hibernate的Validator,可以非常便捷的实现参数校验。本文以SpringBoot为例,介绍一下如何使用Validator基本操作1、maven依赖首先需要引入validator的starter依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validatio
2021-04-19 00:30:14
1042
原创 spring-boot-thymeleaf简单demo
尽管现在提倡前后端分离,但是对于一些面向后端的应用系统,由于缺少前端人力,只能自己搭建。所以,SpringBoot提供的模板引擎,非常有帮助。 在实际项目中,由于时间比较早,还在使用Veloctiy。但是在新版本的SpringBoot中,推荐的还是thymeleaf,所以简单写了个demo,有助于后续在项目中使用。1、增加thymeleaf starter依赖<dependency> <groupId>org.springframework.boot</grou
2021-04-18 00:09:53
320
原创 关于计算机网络的一些好文章
最近计划系统性的学习一下Netty,从开始工作不久到现在,Netty一直没有实践过。但是Netty的重要性不言而喻,还是希望能够对其原理能够有深入的了解。在学习的过程中,发现很多原来学习过的计算机网络的知识欠缺,又开始补计算机网络相关的内容。像是计算机网络模型,TCP协议,HTTP协议等等。这里汇总一下阅读过比较好的文章,可以快速理解其中的一些知识。计算机网络原文链接: 我画了 40 张图就是为了让你搞懂计算机网络层注意其中有一些小的错误,有疑问的地方可以自己再看看其他的文章。HTTP协议原文
2021-04-16 23:32:36
173
原创 重温try-catch-finally
本周一个重要的收获是自己在代码中,引入了java7的try-with-resource方法。该方法实际上用的比较少,和同事讨论的时候,有一个问题比较有趣,如果同时使用try-with-resource和finally,那资源是在finally之前关闭的,还是之后呢?try-with-resource下finally代码块的执行顺序示例代码如下:注意: 使用try-with-resource的类,必须实现AutoCloseable接口。public class TryWithResourceTest
2021-04-16 23:31:24
71
原创 java如何将时间戳转为秒
如何将时间戳转为秒通常的做法public static long toSecondMethod1(long timestamp) { return timestamp / 1000;}直接使用TimeUnit工具箱中的方法一个更友好点的方法 public static long toSecondMethod2(long timestamp) { return TimeUnit.MILLISECONDS.toSeconds(timestamp); }测试代码 public
2021-04-11 08:20:50
8818
原创 一种解决图表数据过多的接口方案
当需要进行前端数据展示的时候,图形和表格是非常有用的利器。但是,最近在工作中遇到了一个问题,那就是在某些情况下,服务端需要返回大量的数据。另外,由于工作限制,没有直接使用echarts和highcharts,但是该方案不仅仅是前端页面绘制的问题。数据量大的问题超过了网关的限制在微服务体系下,前端一般会直接同网关接口交互,然后再由网关将请求转发到真正的服务端。所以,网关需要对传入的内容(比如body和header等)进行解析。为了解析效率,通常需要对body大小进行限制(如2M),超过之后,就会拦截。
2021-04-09 22:35:25
352
原创 利用elasticsearch alias和reindex操作实现服务零停机迁移
利用ES的alias和reindex操作,可以实现某些业务场景下的服务零停机的数据迁移。前提是,数据的读写操作均依赖索引的alias,而非具体的索引。如下图所示:写入操作依赖write_alias别名,读取操作依赖read_alias别名。当需要进行数据迁移时,步骤1:按照需求建立好新的索引,Index_version_v2。步骤2:删除write_alias与index_version_v1的关联,同时建立write_alias与index_version_v2的关联。以下操作为原子操作
2021-04-09 22:34:28
695
2
原创 scanner next和scanner nextLine的区别
该问题源于浏览StackOverflow时遇到的一个提问问题链接源代码:public class Factorials { public static void main(String[] args) { Scanner sc = new Scanner(System.in); char c = 'Y'; int num = 0; do { System.out.print("Ente
2021-04-09 22:33:40
67
原创 如何使用postman传递Http date参数
近期某个项目中,需要调用第三方的HTTP接口,接口示例如下:url: /api/newOrder?Action=xxx&xxxxhost: xxx.api.comDate: Date GMT上面的参数中,url和host意思明显,但是Date是什么意思呢。从HTTP Date这个连接中,我们看到核心解释,它其实是HTTP的一个通用首部,也就是会出现在HTTP Header中。**Date**是一个通用首部,其中包含了报文创建的日期和时间。那么如果是使用java代码,设置Ht
2021-04-09 22:32:52
2305
原创 java三元运算符的空指针NPE问题
线上代码发现一个问题,下面的代码会抛出空指针异常。JSONObject timeZone = getTimeZone();Long sign = null == timeZone? 8L : getSign(timeZone);上述功能比较简单,根据传入的JSONObject获取UTC时区的偏移量,如果没有获取到,就返回北京时间默认的东八区偏移8L;在getSign方法内部,会对timeZone进行处理,核心代码可以简短描述为Long getSign(JSONObject timeZone)
2021-04-09 22:31:51
516
转载 java 注解实例
Java中的注解机制注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据)。 注解的语法比较简单,除了@符号的使用以外,它基本上与java的固有语法一致,java内置了三种注解,定义在java.lang包中。 @Overrid
2014-07-23 10:41:28
449
原创 针对<mvc:annotation-driven />xml出现错误时,做如下修改可以将xml前面的红叉去掉
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
2014-07-20 10:28:20
3506
1
原创 maven spring restful 以json返回时,如果出现406错误该如何处理
此时应该在dispatch-servlet中配置json转换器等内容,j
2014-07-19 23:32:09
685
伺服电机使用手册
2012-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人