java
文章平均质量分 72
51iwowo
但行好事,莫问前程
展开
-
记一次Apache HTTP Client问题排查
当我们使用HTTP Client的时候,需要结合业务需要合理设置connect timeout和 socket timeout参数。当进行问题追踪时,需要利用HTTP和TCP的一些知识,以及tcpdump等抓包工具进行问题验证。原创 2023-07-27 22:38:57 · 1426 阅读 · 0 评论 -
总结最近遇到的几个问题
最近开发中遇到了几个典型问题,总结记录一下。原创 2022-11-12 16:28:46 · 530 阅读 · 0 评论 -
一次网络连通性问题诊断
业务存在一个监控系统,需要监控一些设备的网络是否正常。不过最近发现经常会发生断网误报情况,所以深入探究一下问题原因。原创 2022-07-02 14:56:14 · 431 阅读 · 0 评论 -
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 · 5371 阅读 · 0 评论 -
一次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 · 2755 阅读 · 0 评论 -
clean code的一些总结
前段时间在B站偶然发现了一个关于讲Clean Code的课程,非常不错,对我自己很受用。所以针对课程的内容,同时结合自己的一些经验,总结了一些关于Clean Code的内容。作者视频中使用的语言是Javascript/Typescript,代码示例比较容易,而且Clean Code很多理念是语言无关的,大家可以放心.原创 2021-12-15 07:30:56 · 903 阅读 · 0 评论 -
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 · 8061 阅读 · 0 评论 -
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 · 7165 阅读 · 1 评论 -
记一次SpringBean误用引起的线上并发问题
问题背景之前和同事一起负责一个新上线产品登录模块,开始的时候处于小流量试运行,没有什么问题。突然从某天开始,部分用户报登录校验失败。该问题排查了很久,最终定位到是并发问题,这里回顾一下。出现问题的关键代码AuthParams@Data@Componentpublic class AuthParams { /** * 用户code */ private String code; /** * 用户密码 */ private原创 2021-08-01 23:07:33 · 276 阅读 · 0 评论 -
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 · 1708 阅读 · 0 评论 -
spring session初次体验
最近团队一个项目需要使用Session,之前没有在实际项目中使用过Spring-Session,这里记录一下使用的过程。SessionHttp协议是无状态的,这样对于服务端来说,没有办法区分是新的访客还是旧的访客。但是,有些业务场景,需要追踪用户多个请求,此时就需要Session。关于session的百度百科sessionSession:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Sess原创 2021-06-14 17:44:54 · 218 阅读 · 1 评论 -
对Spring PostConstruct注解的一点新认识
无论是Spring还是SpringBoot开发中,PostConstruct注解的使用频率还是比较高的,通常用于Bean初始化完成的一些动作。在项目代码中,会将配置从配置中心中读取,然后初始化到指定的Bean中。其他需要动态获取配置的地方,直接依赖注入这个Bean即可。示例代码如下:ApplicationConfig动态配置所在的类,主要是属性。@Configuration@Data@Slf4jpublic class ApplicationConfig { /** * c原创 2021-06-06 17:06:47 · 167 阅读 · 0 评论 -
Spring-RestTemplate常用方式使用汇总
当使用SpringBoot时,如果需要调用第三方Rest API,通常会使用RestTemplate。有时候偶尔搞不清楚参数要如何传递,明明参数已经赋值,对方接收到的确是空值。本文对经常使用的方式,做一下汇总。准备工作请求对象@Data@AllArgsConstructor@NoArgsConstructorpublic class Person { private Long id; private String name;}第三方请求@RestControllerpubl原创 2021-05-15 17:55:37 · 207 阅读 · 0 评论 -
关于fastjson的知识又增加了
本周有一个需求,需要调用第三方的阿里云接口,对方要求的协议参数,必须首字母大写。而通常情况下,我们定义Bean的时候,不会直接将变量名设置为大写开头,这样不符合编码规范,那有什么办法可以将首字母序列化为大写的字符串,作为请求参数传递呢?这里主要通过FastJson的一些定制化行为,完成了该类需求。同时,在这个过程中,顺便阅读了一些fastjson的源码,特此记录一下。序列化@Datapublic static class Model { private int userId; private原创 2021-04-24 17:51:36 · 489 阅读 · 0 评论 -
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 · 971 阅读 · 0 评论 -
spring-boot-thymeleaf简单demo
尽管现在提倡前后端分离,但是对于一些面向后端的应用系统,由于缺少前端人力,只能自己搭建。所以,SpringBoot提供的模板引擎,非常有帮助。 在实际项目中,由于时间比较早,还在使用Veloctiy。但是在新版本的SpringBoot中,推荐的还是thymeleaf,所以简单写了个demo,有助于后续在项目中使用。1、增加thymeleaf starter依赖<dependency> <groupId>org.springframework.boot</grou原创 2021-04-18 00:09:53 · 297 阅读 · 0 评论 -
关于计算机网络的一些好文章
最近计划系统性的学习一下Netty,从开始工作不久到现在,Netty一直没有实践过。但是Netty的重要性不言而喻,还是希望能够对其原理能够有深入的了解。在学习的过程中,发现很多原来学习过的计算机网络的知识欠缺,又开始补计算机网络相关的内容。像是计算机网络模型,TCP协议,HTTP协议等等。这里汇总一下阅读过比较好的文章,可以快速理解其中的一些知识。计算机网络原文链接: 我画了 40 张图就是为了让你搞懂计算机网络层注意其中有一些小的错误,有疑问的地方可以自己再看看其他的文章。HTTP协议原文原创 2021-04-16 23:32:36 · 151 阅读 · 0 评论 -
重温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 · 63 阅读 · 0 评论 -
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 · 8645 阅读 · 0 评论 -
一种解决图表数据过多的接口方案
当需要进行前端数据展示的时候,图形和表格是非常有用的利器。但是,最近在工作中遇到了一个问题,那就是在某些情况下,服务端需要返回大量的数据。另外,由于工作限制,没有直接使用echarts和highcharts,但是该方案不仅仅是前端页面绘制的问题。数据量大的问题超过了网关的限制在微服务体系下,前端一般会直接同网关接口交互,然后再由网关将请求转发到真正的服务端。所以,网关需要对传入的内容(比如body和header等)进行解析。为了解析效率,通常需要对body大小进行限制(如2M),超过之后,就会拦截。原创 2021-04-09 22:35:25 · 320 阅读 · 0 评论 -
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 · 59 阅读 · 0 评论 -
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 · 438 阅读 · 0 评论