- 博客(52)
- 资源 (2)
- 收藏
- 关注
原创 好的代码——个人观点
尤其是在不希望重复编写批量处理逻辑的情况下,多线程开发可以使代码更加简洁高效。我们平时在项目中可能不会经常遇到特别复杂的算法问题,大多数数据量也并不大,所以算法的复杂度通常可以忽略。方法内部的代码实现也应该如同书中的文字一样简洁明了。,它不仅能减少代码的重复,还能让代码更容易修改和维护,同时满足开闭原则。直接影响到程序的性能,因此减少 I/O 操作是提高性能的一个重要途径。之前我以为这样理解代码就已经足够好了,这也是我非常喜欢的编码风格。在 200 行之后才去使用的代码,这样会让代码的可读性变差。
2024-10-24 10:55:56 257
原创 java线程池bug的一些思考
不过没有造成数据再内存里翻倍,(一份是数据库的List,然后还都在任务队列里面有一份,如果任务队列里面的数据和数据库返回的是一致的,应该多出来的是那么多指针。数据库我使用的是JPA,然后我就遇到了第一个问题,发现使用Stream 跟自己想象的不一样。核心线程数,最大线程数,任务队列,当任务超过核心线程数的时候,就会往任务队列里面放,如果超过任务队列数量那么就会增加线程数到最大线程数。其实我理想的方式是,我从数据库取100个,然后交给线程池处理,处理了差不多了,在从数据库取一部分。是自己“崇洋媚外”。
2024-10-18 13:37:06 421
原创 从nas硬盘大量解压缩zip文件的性能问题
记得读书的时候,计算机历史中就有人想把API调用都设计成一样的,本地调用和网络调用看起来是一样的,但是这期间的时间差,如果不仔细考虑,那么上层的代码就无法使用。(如果是网络调用,你需要读取很大的内容来反复处理,如果是从内存读取内容,就可以把代码写的更好读,一次一次遍历。使用的是1k的缓冲,但是nas使用的是1M的缓冲,那么用脑子想想(还没有进行验证)应该是造成了nas缓冲的大量浪费。提供很高的服务给下一层服务,你不需要管中间的细节,你调用就好了。其实这里面还是涉及到太多的底层,有自己无法理解的地方。
2024-10-16 11:08:59 812
原创 文件处理代码优化
其实有考虑把第二个工厂方法,放到中间状态的bean中。直接调用bean的方法返回最后的结果。这样更加面向对象一些。还是因为这样处理比较少。任务:做一个合同文件证据下载的组件。
2024-10-14 17:26:40 237
原创 使用两个小的质数来创建公钥私钥
在实际的加密算法中,会使用非常大的素数来保证安全性。但是通过以上步骤,你可以理解生成公钥和私钥的基本过程。公钥可以用于加密数据,而私钥用于解密加密的数据。让我们使用5和11来举例生成公钥和私钥的过程。
2023-05-30 14:20:55 1212
原创 如何使用java解析一个SQL中,使用了哪些table
以上代码解析了一个SELECT语句,并使用TablesNamesFinder对象遍历SELECT语句中的FromItem对象,获取使用的table名称。要使用Java解析SQL语句,可以使用开源的Java SQL解析器库,例如Apache Calcite、jSQLParser等。这样就可以方便地使用Java解析SQL语句,并获取其中使用的table名称。
2023-04-28 13:48:41 1164
原创 自己喜欢的代码
每次开发的时候总可以写出一些自己很满意的东西。这些代码也给自己带来了小确幸。在这记录一下。可能以后也会有用。@Transactional(REQUIRES_NEW)public void handleException(long statusFrom, long statusTo, long statusError, TProcess process) { process = processRepository.findById(process.getId()).get();
2022-05-19 09:29:58 256
原创 简单分析office是如何支持多种复制格式的
发现一个有趣的现象。就是如果从word文档copy到word文档格式也是复制过去的(是可以选择的,可以带格式,也可以不带格式)。如果从word文档复制到txt文件,那么复制的就是文字内容。如果从网页复制内容到word文档,格式可以转化过去。这是如何实现的呢?后来发现其实是在复制过程中,操作系统会提供(不知道是谁提供的)多个数据渲染器(DataFlavor)。每个渲染器可以支持一种媒体格式,可以通过一种方式输出内容。Windows应该是根据扩展名,来判断应用类型,再通过输出方式输出到对应的文件
2022-02-11 19:19:03 508
原创 2021阿里83行代码挑战赛结束。
工作了十几年,第一次参加代码比赛。最后得了第十六名,最后结局还算挺好的。也是对自己写代码的一个肯定吧。第一关 考的技术第二关 考的是数据结构。只用了字典树,最后用的递归遍历。所以内存上得分不高。第三关 考的是面向对象设计模式、代码规范。最后还是没得100分。没闹明白判分原则。感觉自己写的挺好的。最后为了得到高分,妥协了。第四关 考的是知识的全面性多线程 NIO spring security 正则表达式等等吧。判分是找bug,一共10个bug,一个9分。我最后找到了7个。..
2021-11-01 18:00:00 188
原创 spring security 慢拖累系统性能。
接到一个新的任务。要求系统的实时性比较好,需要在100毫秒内得到返回。 需要basic auth验证。开始就使用了spring security。配置了一个basic auth。并且使用了HandlerInterceptor来记录了服务的执行时间。在调试过后发现,本地和服务器上面运行良好。都在几十毫秒的程度就可以返回。但是在压力测试的过程中发现了问题,好多都是500毫秒左右。开始怀疑是网络或者是网关的问题。在一步步排除以后发现应该是spring security filter执行的时间不稳定,并
2021-10-22 10:31:39 1837
原创 吐槽敏捷开发
敏捷的由来在2001年,17 个程序员大佬聚集在犹他州的雪鸟(Snowbird),提出了一种“通过做并帮助他人做”的新软件开发方式。通过这项工作,宣言的签署者了解到这些原则将在软件开发领域对他们产生多大的帮助——但他们不知道他们的想法会以多快的速度传播到他们的行业之外。敏捷的价值观(道,第一原则)Individuals and interactions over processes and tools 个人和交互胜过流程和工具 Working software over comprehen
2021-09-16 18:40:36 285
原创 用程序解决经典题之十连环,JAVA版本
作为一个CRUD程序员,每天处理的事情只有增删查改。用不到任何的设计模式,程序也不能帮助我解决任何生活中的问题。一次在算法书中看到了下面的问题。于是努力思考,并通过面向对象的思想,并最后用程序解决了问题。题目:1.第一个答案是B:的问题是哪一个?A:第2题 B:第3题 C:第4题 D:第5题 E:第6题2.唯一的连续两个具有相同答案的题是?A:第2、3题 B:第3、4题 C:第4、5题 D:第5、6题 E:第6、7题3.本题答案与哪一个相同?A:第1题 B:第2题 C:第4题 D:第7
2021-08-11 20:51:33 209
原创 程序员驱动开发
在万物可以驱动开发的时代。终于理解了什么叫不做不错。程序员为什么需要其他人来驱动开发呢?是因为错误都是程序员造成的,你犯了错,还不能让别人告诉你怎么做吗?让我们先来看看什么可以驱动开发。据不完全统计:TDD(Test Driven Development) FDD(Feature Driven Development) BDD(Business Driven Development) R-TDD(Rapid Template-Driven Development) CDD(Contrac
2021-07-16 21:45:23 386 3
原创 hystrix 方法内部 traceid丢失的解决方案
在微服务系统中,会使用链路追踪把多方调用连接起来。便于问题的调查。公司项目中是用来skywalking来做链路追踪。再添加了hystrix 以后,发现
2021-06-11 14:37:59 1051 1
原创 java老年代过多
应该是从java G1开始就没有具体的老年代了。但是在工作中由于使用的是老的GC形式。还是出现了这个问题。下面记录一下自己发现问题,解决问题的方法。首先下载生产环境dump 使用jvisual 打开dump。老年代持续过高,可能有两个原因 大对象过多。如果对象太大,会直接分配到老年代 代码中有leak,造成资源无法回收。 拿到dump后,看到了有很多 byte 数组过大。看了一下内容,是上传附件的内容导致的。下面是第一版上传附件的后端代码。由于需要调用其他服务,所以要把re.
2020-11-20 15:23:41 3992
原创 微服务不是银弹
所有的东西像硬币一样都具有两面性。(莫比乌斯环除外)看技术也是一样的,首先要知道这个技术为什么要出现,解决了什么问题。然后就是他带来了什么问题,你需要知道怎么去处理这些问题。新技术 好处是什么 带来的什么麻烦 能解决的麻烦,需要找到适合你的解决方案 不能解决麻烦,你能不能承受这些问题。 第一代:单体服务好处:简单 坏处:不能拓展第二代:复杂均衡好处:应用服务可以横向扩展 坏处:需要解决session同步 引出的技术 session共享...
2020-11-06 10:10:22 231
原创 annotation修饰调用参数
在项目里面想使用自定义annotation,就是参数列表,类似于spring mvc里面的 @PathVariable("id") 注解。然后再使用AOP来解释这个注解。1) 开始添加springboot aop依赖, <dependency> <groupId>org.springframework.boot</groupId> ...
2019-12-10 15:06:23 674
原创 springboot profile
想使用profile对springboot项目进项不同环境的配置。查看了一下网上的文章,大部分都是通过使用application-dev.properties、application-uat.properties或者application-prod.properties,来区分不同的环境的。照做了以后觉得重复的配置属性太多了,而且如果配置文件多的话,会造成文件数量成倍增长,给阅读文件和管理...
2019-11-14 17:30:06 114
原创 ContentCachingResponseWrapper spring security 下不起作用
项目里面计划把所有的response打印出来。开始觉得很简单,只要使用一个responseWrapper 把response包装一下就可以了。开始计划按照项目中的RequestWrapper写一个出来。写的时候发现没有什么头绪,跟request还是很不一样的。然后找了一下ResponseWrapper 的实现类。然后在spring里面的jar包里面找到ContentCachingRespo...
2019-09-02 11:00:01 3337
原创 docker安装oracle xe
由于公司数据库不稳定,这样就导致开发的项目需要经常更新数据。然后就想自己在linux环境下安装一个oracle。然而并不会安装,就想到使用docker安装一个会比较简单。之前只了解过一些docker概念,并没有实际操作过。现在记录一下操作顺序。搜索docker 镜像 docker search oracle 拉取docker image docker pull 安...
2019-07-09 10:51:57 1194
原创 java 使用lambda 进行排序
使用lambda表达式进行排序。代码第一版 Collections.sort(jobs, new Comparator<Job>() { @Override public int compare(Job t1, Job t2) { return t1.getId().compareTo(t2.getId()); } }); ...
2019-03-05 10:35:01 5532
原创 自动删除 Maven 下载不完全的jar包
之前用Eclipse启动Maven的项目的时候,有时候会启动不起来。因为一些Jar包在没有下载完全。并没有找到什么好的方法。如果谁有更好,或者更正式的方法麻烦请留言告知。谢谢。 然后自己用java写了一个程序,计算jar的sha值,判断是否完全下载了。 主要逻辑如下用户输入maven repository的路径 根据路径遍历所有jar包。(jav...
2018-11-13 15:41:37 760
原创 微服务 自动选择restTemplate
最近在做有关微服务的项目。学到了很多东西,但是中间也遇到了很多问题。其中一个问题就是,一个微服务项目有时候需要通过url访问服务,有时候需要通过serviceId 访问注册在注册服务器的服务。这个在开发过程中就感觉很麻烦。客户端我们是通过restTemplate访问的。当访问url的服务时,需要直接使用restTemplate而当访问serviceId的服务时,需要使用@AutoB...
2018-10-15 21:24:41 431 1
原创 if 条件判断语句
需求背景:按照人的年纪计算票价。如果一个人不到10岁,不要钱如果这个人超过10岁,但是不到18岁,5元如果超过18岁。10元。参考代码如下: public int getPrice(int age) { if (age <= 10) { return 0; } if (age > 10 &&...
2018-04-20 14:38:20 277
原创 代码之道——面向对象编程
开始觉得自己对代码整洁、重构有些认识就打算写几篇文章,分享一下。其实开始并没有什么大的框架,就是东想一点,西凑一点。后来写着写着开始整理的一些思路。前几天也写过一个代码之道,现在想想其实并没有写出什么内容。其实现在想想,我的代码之道——代码美不美。其实等于没说,我看中的其实是代码是不是面向对象的。代码——其实就是对现实实物的编码过程。编程的发展过程机器代码汇编代码(用人类可以理解的语言去给机器代码...
2018-04-17 21:56:16 561 1
原创 静态方法在项目中的运用
静态方法可以不需要生成对象就可以直接使用。在项目中,很多工具类会使用static生命,使之成为静态方法。但是个人建议不要或者在项目中少量使用静态方法。如果存在与项目业务无关,并且不会修改,并且一概正确的逻辑可以使用静态变量修饰。比如Math.add。与项目业务无关。无论在哪个项目里面都是计算两个整数的和。如果是跟项目业务相关的。StatusConvertor, 一个状态转换器。可能声明称静态在使用...
2018-04-16 15:44:24 367
原创 JAVA静态变量的使用
很多的地方建议把一个一个不变的变量使用static表明,然后所有的变量字母都是用大写来表示。这样的优点 是在读代码的时候我们知道这个字母代表什么, 当这个字母变化的时候,我们只需要修改一个地方就可以修改所有地方了public static String GENDER_MAN = "M".if (GENDER_MAN.equals(gender)){ ...}大量的这种变量存在于...
2018-04-14 22:04:28 11051
原创 代码之道
这个名字有点大。其实就是自己的一些感悟。自己的感悟也可以称为自己的道。道可道,非常道。所以就随便看看吧。提到了“道”就要提到“术”。道是什么呢,就是看代码“美不美”。为什么他美呢,我也说不出来。这个是我自己的“道”。既然道说不出来,那么我们就执行去具体有哪些“术”了,其实“术”并不是目的,只是一种手段而已。自己的道说不出来,也许是因为自己能力有限,表达有问题,毕竟有那么多NB的人写了这么多东西,我...
2018-04-13 16:17:23 310
原创 JAVA虚拟机的通俗解释
JAVA不同于C语言,是在JAVA虚拟机中运行的。JAVA虚拟机的百度解释如下。虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。我开...
2018-04-12 20:28:24 544
转载 spring 关闭事件
@Servicepublic class StopAddDataListener implements ApplicationListener<ContextClosedEvent> { private Logger logger= LoggerFactory.getLogger(StartAddDataListener.class); @Autowi...
2018-04-09 09:39:54 1404
原创 插入数据库截取字节长度
背景:oracle数据库。储存编码UTF-8.需求:如果字段超出数据库字段长度,那么截取字符串后储存到数据库中。字段长 4000最开始计划直接使用java String.subString,然后一想,好像不对,汉字长大概是占3个字节。如果有汉字的话,肯定超长了。然后就找了找有没有工具类可以直接截取数据库长度的方法,没有找到。只能自己写了。网上找了找UTF8相关文章,发现UTF8规则如下。 ...
2018-03-08 16:48:17 1263
原创 resttemplate Connection timed out 和 SocketTimeoutException
最近开始使用resttemplate 调用一些其他rest 服务。之前公司默认的timeout时间是20秒。然后就在网上搜了一个方法设置了连接超时时间。方法如下, <bean id="requestFactory" class="org.springframework.http.client.SimpleClientHttpRequestFactory">
2018-01-18 18:01:49 19031 9
原创 spring3 和 Java8
Spring 3 和 java 8 不相互兼容。需要升级到Spring4 或者至少升级到Spring 3.2.16引用原资料点击打开链接
2017-09-26 11:58:02 588
原创 spring 4 restful 服务添加http-basic 验证。
spring 4 restful 服务使用spring-security添加http-basic 验证。
2017-08-16 16:49:29 460
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人