Java
文章平均质量分 68
那起舞的日子
IT男,运动控;尚力量,更尙博学;偶像曾国藩,女神白娘子;不求屌丝逆袭,但求日日精进;让每个日子起舞。
展开
-
修复存量数据技巧之【存储过程】
开发迭代的过程,你是否经常遇到需要考虑:增量、存量数据如何处理的场景?比如一个新功能,对增量的数据不用过多考虑,不过对存量的数据,需要处理后才能满足升级需求。这里简单记录下在修复存量数据过程中可能会用到的一个技巧【存储过程】。存储过程一般很少用,笔者写过和接触过的存储过程寥寥无几。有的领导在编码规则中会专门强调尽量不用或者少用存储过程。不过,在修复数据,数据量不大又需要遍历的时候,走走存储过程还是蛮方便的。数据库前期业务未考虑幂等,未对关键的几个字段比如:company_id、employee_id, ty原创 2022-06-13 08:02:51 · 686 阅读 · 1 评论 -
技术视角看我的一码通-系列2
文章目录两个核心入口1) 小程序2)进入方式核心接口使用缓存小伙伴们,大家好。上次那篇文章-“技术视角看我的一码通【系列】”简单的从扫描一码通后二维码中包含的网址信息分析了下,今天我们继续。这篇文章主要是为下期深入讲解【缓存】做个铺垫,以及准备一下缓存所需的基本环境。两个核心入口笔者把“一码通”保存在了手机桌面,所以打开一码通非常方便。一般打开一码通的步骤是: 支付宝: 支付宝首页 -> 一码通(已添加到了首页)或者:首页-》 搜索一码通-》 进入 微信: 微信 -》 发现 -原创 2022-01-10 04:16:29 · 1543 阅读 · 0 评论 -
JVM-5-垃圾收集算法
读者朋友,今天介绍下垃圾收集算法。之所以会有不同的垃圾收集算法,就是因为在JVM的Heap区,有着分代的假说。之所以要分代,是因为不同“代”之间区别很明显,有着显著不同的特征,正因为这些显著不同的特征,所以针对各个代就有了针对性的“策略”——不同的GC收集算法。分代(Generational Collection)假说分为两种:分代原理弱分代假说大量对象都是“朝生夕灭”弱强分代假说熬过多次垃圾收集的对象就越难以消亡那么分代是依据什么来分的呢?依据:对象的年龄。对象的原创 2021-05-25 23:35:47 · 137 阅读 · 0 评论 -
JVM-4-对象已死?
读者朋友,晚上好,这里简单介绍下在JVM中是如何判断对象是否存活的。只有死去的对象,GC过程就会回收掉,所以GC的第一步是判断对象是否已死。文章内容均来自:《深入理解Java虚拟机 JVM高级特性与最佳实践》 周志明著 第三版机械工业出版社判断对象是否存活有2种方法:一、判断对象存活的2种算法方法原理优点缺点引用计数法(Reference Counting)对象中添加一个引用计数器,有一个地方引用,就+1;引用失效就-1简单易懂相互循环引用,造成“假引用”原创 2021-05-25 00:26:19 · 196 阅读 · 0 评论 -
技术视角看生活-2-为什么来电后必须立刻接听?
大家好!之前的技术视角看生活-1-目录篇里抛出的第一个疑问就是:高德地图语音播报时,后台正在运行的酷狗音乐声音会自动变小,为什么?来电后无论在打游戏、看视频、听歌,手机主界面立马会显示来电界面,必须得马上处理,为什么?听歌时候,然后看抖音,酷狗播放器会自动暂停,为什么?其实,上面几个为什么的本质,都是关于【手机软件平台架构】方面的。如果想真正解释清楚,最好需要有实际APP的开发经验,开发一个APP,从开发、发布、安装、自测,走完整个流程自然就对以上原理很清楚了,因为笔者之前都是后端开发原创 2021-05-20 03:24:05 · 421 阅读 · 0 评论 -
技术视角看生活-1-目录篇
嗨,读者朋友,大家好!回家路上边导航边听歌,无意间发现高德地图语音播报的时候,酷狗音乐正在播放的歌曲的声音会自动变小,待导航语音播报完毕,后台的音乐声音恢复正常……日常经意或者不经意都会基础大量类似的现象,加上最近看JVM,着实有些枯燥,所以不妨出个专栏,专门记录零碎的生活中发现的技术之美。一、地图导航语音播报时后台运行的音乐播放器声音会自动变小与此类似的现象还有:1.2 来电的时候,无论在听歌还是刷视频,来电会充斥整个页面,必须立刻处理1.3 听歌时候又开始刷视频,音乐播放器会自动暂停播放背原创 2021-05-20 00:49:57 · 146 阅读 · 0 评论 -
JVM-3-实战制造OOM
读者朋友,下午好。这里从JVM的堆、栈、方法区(常量池)、本机直接内u存四个维度分别人为制造OOM-Out Of Memory。目的:1、怎样的操作会导致在指定区域发生OOM?或者StackOverFlow?2、出现这种情况时候如何分析?如何解决。(不是重点,后面学习了各种检测工具之后回头思考)以下代码示例均来自:《深入理解Java虚拟机 JVM高级特性与最佳实践》 周志明著 第三版机械工业出版社1、堆溢出要使堆溢出,只需要创建大量对象即可,并且保证对象在使用。package com原创 2021-05-16 18:08:34 · 1888 阅读 · 3 评论 -
JMV-2-基本构造和各区域作用
读者朋友,下午好。这里介绍下JVM的组成、各部分作用、各部分容易发生的问题等,一图胜千言。当然也可以用电脑画图,但是确实没有手绘方便。原创 2021-05-16 15:03:38 · 300 阅读 · 1 评论 -
JVM-1-虚拟机系列学习目录
大家好,这里记录学习JVM的过程。所有内容均来自:《深入理解Java虚拟机 JVM高级特性与最佳实践》 周志明著 第三版机械工业出版社我们不妨带着以下问题来阅读:JVM的构造是怎样的?没个区域主要做什么?各个区域容易发生什么问题?OutOfMemoryError、StackOverFlow、内存泄漏、内存溢出的具体示例?如何证明在哪个区域发生了?如何解决?GC机制——如何判断哪些对象可回收?GC的常见算法及优缺点?知道这些的作用?排查JVM故障的工具有哪些?怎么用?JVM如何调优原创 2021-05-16 14:52:34 · 175 阅读 · 0 评论 -
训练程序思维的些许益智题目
大家好!其实,写好程序,本质是什么呢?逻辑思维。逻辑思维本质是什么呢?本质是推理和演算、总结和归纳、假设等等,这些的本质又是什么呢?个人觉得应该是数学吧。所以,这里把自己曾经接触过的一些益智的训练思维,也算是编程思维的题目分享出来,大家有更简洁的思考方法,欢迎评论留言。程序也是如此,实现一个功能有多种方法,尤其是一些算法,用程序表达出来并不是特别难,难得是理解背后的数学逻辑。一、题目一个水池装有甲乙两个水管,单开甲管4小时能注满,单开乙管5小时放完水,两管同时打开多少小时注满水?二、答案原创 2021-05-09 17:56:47 · 225 阅读 · 0 评论 -
并发-2-竞争条件例子、锁对象
读者朋友,下午好!今天分享一个很好地讲解并发中竞争条件的例子——银行在多个线程时候,随机在2个账户之间随机的转金额,在未加锁的时候,账户总金额会出乎意料的不一致;我们希望的是无论怎么转账,银行所有账户的总金额是固定不变的。示例代码来源《Java核心技术 卷1 第10版》 Core Java Volume I-Fundamentals(10th Edition)[美] Cay S.Horstmann 著周立新 陈波 叶乃文 邝劲筠 杜永萍 译代码库:git@github.com:cmhhc原创 2021-05-05 19:02:38 · 243 阅读 · 0 评论 -
并发-1-从直观的swing弹球感受并发
大家好,从今天开始,有计划的恶补一下并发知识。目录见:目录示例代码来源《Java核心技术 卷1 第10版》 Core Java Volume I-Fundamentals(10th Edition)[美] Cay S.Horstmann 著周立新 陈波 叶乃文 邝劲筠 杜永萍 译一、效果图上图的却显示无法通过多次点击Start出现多个弹球,Close也没法关闭。上图用到了线程,可发射多个弹球并且可Close。二、示例代码git仓库 git@github.com:cmhhcm/g原创 2021-04-18 16:55:59 · 184 阅读 · 1 评论 -
并发-学习计划
一、夯实基础根据《Java核心技术 卷1 第10版》来夯实直观demon感受线程线程中断线程状态新创建线程、可运行线程、被阻塞线程和等待线程、被终止线程线程属性同步线程安全的集合Collable 和Future执行器10.同步器线程与Swing二、实战案例从codeHub或者收藏的公众号中寻找实战案例:>=10三、落实在作品中思考怎么融合到自己的代码中,并做个作品出来。...原创 2021-04-18 15:44:16 · 108 阅读 · 0 评论 -
安全系列-2-自定义参数校验-枚举校验
Hi,大家好。今天实现一个枚举类型的参数校验器。效果图:一个接口在Controller层,如果有个属性是枚举类型,我们把参数定义为String呢,还是定义为枚举?类型优点缺点String方便灵活,想传啥传啥其他开发看到此代码不明确可以传什么值枚举非常明确知道可以传哪些值不好做参数校验,容易报HttpMessageNotReadableException类型的异常项目地址:还是在之前的参数校验项目基础上开发的git@github.com:cmhhcm/S原创 2021-03-07 00:02:55 · 771 阅读 · 1 评论 -
SpringCloud-3-Eureka实现服务间调用
Hi,大家好。目标:3个SpringBoot的项目,一个作为EurekaServer,另外2个作为客户端,客户端A用四种方式调用客户端B来实现通信。知识点:Eureka的基本配置界面查看服务注册情况及判断是否真正注册成功三种方式实现服务间调用服务名作用简称EurekaServerEureka服务器ParamsValidation客户端客户端BEurekaClient2客户端客户端A注册效果:客户端分别使用:@DiscoveryClie原创 2021-03-04 01:53:34 · 2179 阅读 · 3 评论 -
SpringBoot-2-MyBatis实现增删改查
文章目录一、整体包结构二、核心依赖三、application.yml配置四、mvc三层五、总结这里介绍下Spring+MyBatis实现CURD。后期我们可以在这个基础上逐步去增加一些我们想要实现的功能和技术。实现思路:新建SpringBoot项目(web) -》 引入MyBatis依赖 -》连接数据库配置 -》 Mapper层和Mapper.xml -》 Postman自测这里暂不考虑用其自带的18种方法。项目整体代码详见:git@github.com:cmhhcm/SecurityTes原创 2021-01-31 19:05:16 · 233 阅读 · 0 评论 -
能写出一个生产笑话的程序吗?
文章目录这是人工智能、大数据的时代,很多程序已经可以写诗、作词、作曲了,不过我觉得这些确实有难度,今天突然来了灵感,用程序来创作笑话,会是什么结果呢?当然,怎么创作,这里就不show code了,因为:暂不会。不过,不妨先来分析分析写这种程序的思路:1、笑话的定义:你知道吗? 有一个专门的笑话公式呢!完美笑话公式: x=(fl+no)/p其中x表示笑话的完美程度f表示笑料的有趣程度l表示笑话的长度n表示听笑话者笑得前仰后合的次数o表示引起尴尬的程度p表示双关语的数量既然公式原创 2021-01-27 23:55:40 · 158 阅读 · 0 评论 -
安全系列-1-自定义参数校验
文章目录一、背景二、实现效果三、如何自定义参数校验?1)准备工作2)自定义注解3)实现ConstraintValidator接口,重写isValid方法4)参数异常处理四、遇到的问题1、@Validated未生效,自定义注解断点进不去2、开始引入了thymeleat模板,跳转到了页面;或者报错:3、返回的数据格式不是我们预期的JSON格式。五、思考1、ConstraintValidator 校验的本质是什么?拦截器?2、需要注意一下@pattern中regex表达的是:如果不满足表达式,才会报错。一、背景原创 2021-01-24 12:30:22 · 416 阅读 · 0 评论 -
IDEA无法启动或者启动闪退
文章目录因为尝试按照网上教程去破解IDEA,尝试了几次后虽然当时激活到了2089年,但是过一阵子又回归到了需要注册的状态。索性下载最新版,发现启动不了。教程:https://www.cnblogs.com/yangchangsong/p/12693230.html现象:点击IDEA启动图标,无反应;在~/目录下也未发现任何启动报错输出的log解决办法:找到idea.vmoptions这个文件,删除java-agent的内容即可。该文件位置:不同操作系统路径不一样,笔者系统是Mac,路径是:原创 2021-01-17 11:24:40 · 1310 阅读 · 0 评论 -
short s1=1;s1 = s1 +1有什么错?看这篇就够了。
文章目录一、这篇博客的不同二、代码示例三、总结一、这篇博客的不同题目:第一题:short s1 = 1; s1 = s1 + 1;有什么错?* 第二题:short s1 = 1; s1 += 1;有什么错?* 第三题:第三题:short s1=1,s2=1;short s3=s1+s2;有什么错?看了网上相同题目的解析,要么太啰嗦,要么知识点讲解得不全、不透彻,笔者重新梳理了下。所以看这篇就够了。二、代码示例具体见githubhttps://github.com/cmhhcm/new原创 2020-09-01 06:05:14 · 1107 阅读 · 0 评论 -
技术面试感想一二
文章目录一、面试应该是一个比较轻松的过程二、主动投简历而不是被动回答三、面试不是“应试”,请丢弃"应试思维"四、相信自己五、不要为了技术而技术疫情期间,都说不敢换工作,或者换工作要慎重之类的。笔者想好了要换,就裸辞了。总共面试了十五家左右(Java),用时差不多两个月。最终入职哪里,并不重要,重要的是从中感悟的东西,个人觉得也许对其他伙伴有所帮助。笔者在上海面试了十二三家,在西安面试了五家。在上海呆了三年多,今年回西安,想离家近点。感悟有以下几点。一、面试应该是一个比较轻松的过程如果你面试面的很辛苦原创 2020-08-30 11:27:43 · 642 阅读 · 1 评论 -
从IDEA的一次意外退出发现JVM
文章目录一、背景:1、排除内存不够。2、看日志二、发现JVM三、总结一、背景:2020.1的IDEA到期了,网上寻找各种办法,然后把“全家桶” jetbrains-agent.jar拖入的IDEA后,发现IDEA打开就闪退;无奈重新安装IDEA后也闪退。按照网上解决思路:1、排除内存不够。看下mac的内存 :1)活动监视器看;2)命令行看:echo -e "\n$(top -l 1 | awk '/PhysMem/';)\n"笔者是Mac,在应用程序中右键Idea的标志:显示包结构,找到原创 2020-08-08 17:22:00 · 4006 阅读 · 2 评论 -
java并发编程-1-多线程简单运用
文章目录一、运用场景二、结论三、代码读者盆友,晚上好。这里介绍下多线程的简单用法。一、运用场景实现配置中心,有多种思路,其中一种思路是:1)启动线程,定期刷新值;2)另外利用Zookeeper的Watche机制,对新增的节点或者有变化的节点新增监听。其中1)所用到的就是今天要介绍的。二、结论主要介绍以下四种多线程最简单的用法: * Executors.newCachedThreadPool(); * Executors.newFixedThreadPool(3); *原创 2020-06-27 21:13:38 · 357 阅读 · 0 评论 -
三目运算符引起的NPE
文章目录一、诡异的NPE二、原因:三目运算符表达式类型对齐拆箱导致NPE三、继续深究四、总结情况这段代码:一、诡异的NPE报错信息如下:2020-06-03 13:02:22.193 [] [DubboServerHandler-120889-thread-8] ERROR com.alibaba.dubbo.rpc.filter.ExceptionFilter 90 - [DUBBO] Got unchecked and undeclared exception which called by原创 2020-06-08 22:31:48 · 676 阅读 · 0 评论 -
你有良好的编码习惯嘛?
文章目录一、背景二、编码前2.1 透彻理解需求文档2.2 写好设计文档2.3 评估开发时间三、编码中3.1 确定开发的分支3.2 多人协作,及时git pull; git push3.3 小步快跑,一个功能点一个commit3.4及时反馈遇到的技术问题、产品问题3.5 及时准备SQL脚本四、编码完成及自测五、提测5.1 跑脚本5.2 Jenkins部署服务5.3 自我验证六、复盘6.1 开发流程复盘6.2 技术难点复盘6.3 沟通及管理复盘一、背景经常性重复一些流程,时间久了就容易越过一些步骤。eg:原创 2020-06-07 22:14:36 · 359 阅读 · 0 评论 -
时间序列化与反序列化问题
读者盆友们,晚上好。这里分享下日常开发经常遇到的一个问题:时间DateTime序列化和反序列化的问题:如果不处理,那么序列化和反序列化就有问题。import org.joda.time.DateTime;class CreateCouponCommand{ private DateTime validFrom; private DateTime validUntil;//省略get...原创 2020-04-10 23:59:23 · 862 阅读 · 0 评论 -
java8-1-实践用法示例
文章目录一、常用示例1、收集——.map2、过滤—— .filter3、规约—— .reduce4、终端操作之一——.collect读者朋友晚上好。今天是清明节,是缅怀先烈的日子,也是疫情期间缅怀因疫情而牺牲的英雄的日子。缅怀之余,今天在这里总结下笔者日常开发中常用的java8的一些简单功能,类似代码示例,以便忘记使用规则的时候快速查找和翻阅,也许会对你有所启发。一、常用示例Java8出来...原创 2020-04-04 23:56:46 · 203 阅读 · 0 评论 -
SpringBoot-1-启动依赖与自动配置
文章目录一、使用感受二、第一个应用程序三、总结本博客示例代码均来自[美] G然爱过Walls 著的《SpringBoot实战》 丁雪丰译一、使用感受相比繁琐的Spring配置,SpringBoot的使用给人恍若隔世的感觉;如果你接触过大数据,你也一定很烦恼,大数据环境配置基本都要搞一天,才能接触到业务。而SpringBoot的自动装配、起步依赖真实简化了配置,让你不必为这些环境性的东西...原创 2020-03-26 03:50:58 · 1567 阅读 · 0 评论 -
微服务-1-服务间依赖
文章目录一、服务粒度二、服务之间的依赖1) 确定一个最基础的服务,它不依赖任何服务2)事件驱动、消息监听解耦3)面向“前端”的服务——Backend For Fronted公司项目就是微服务,代码管理工具是Git,项目管理工具Gradle,底层用的是jpa,这里总结下对微服务一些设计思想的理解。一、服务粒度哪些业务可以划分为一个业务服务?什么时候就要划分?划分到什么粒度比较合适?按照《领域...原创 2020-03-15 00:31:55 · 5094 阅读 · 2 评论 -
枚举-特定于常量方法的实现及策略枚举
文章目录一、最常用的用法二、特定于常量的方法实现三、策略枚举Strategy enum各位读者盆友,晚上好。这里分享下枚举的2种不常见的用法。代码示例来源于 Thrid Edition[美] Joshua Bloch 余黎敏译一、最常用的用法常见的多事枚举加个构造方法,然后根据所需用即可。eg:package com.chm.effectivejava.myenum;/** ...原创 2020-03-09 01:46:46 · 366 阅读 · 1 评论 -
javac -cp java-cp 看这篇就够了!
一、背景:平时我们用javac 或者 java执行程序可能比较少,入门时候用到的也是简单的类,没有package或者没有依赖关系或者没有用其他.jar包的,所以执行起来没啥问题。在Algorithems Froth Edition中,经常要用命令行模式来Test 算法性能。二、问题在排序算法-初级排序算法这一章,执行java SortCompare Insertion Selection 1...原创 2020-03-01 11:09:08 · 9572 阅读 · 11 评论 -
我从《码出高效-Java开发手册》中学到的
文章目录一、前言二、一起回顾三、总结一、前言在我印象中,《Java开发手册》是一本描述Java技术细节规范的文档,这本《码出高效——Java开发手册》确乎开了眼界。介绍的内容可不仅仅只是“代码风格”。正如书中简介一样:本书以打造民族标杆图书为己任。我看了后,感触很多。二、一起回顾说说我学到的新东西:原码、反码、补码这里介绍得比类似《计算机操作系统》、《计算机编译原理》要好;T...原创 2019-12-30 16:23:00 · 243 阅读 · 2 评论 -
实战系列-2-修复数据常用技巧
文章目录一、修复数据场景场景1场景2场景3二、修复数据常用技巧技巧1 批量修改数据技巧2 用到的SQL技巧1) SQL技巧01 从一张表部分字段更新到另一张表中2)SQL技巧02 把另一个表的数据插入到一个表三、总结20191006各位小伙伴,国庆快乐!这里总结一下日常工作修复数据常用到一些技巧。一、修复数据场景没有应用场景,光谈技巧也是“假大空”。场景1比如BMI值的计算。系统中前...原创 2019-10-07 01:41:40 · 527 阅读 · 0 评论 -
基础平台系列-1-第三方服务
文章目录一、微服务下的第三方服务?二、概览1)短信服务2)实名认证3) LBS服务4) 微信相关5)短URL服务6)NLP服务7) 手机号码归属地8)行为验证三、总结一、微服务下的第三方服务?每个系统或多或少都会用到第三方,这里不详细介绍第三方,罗列我们日常工作系统中可能会涉及到的第三方,扩大视野。在微服务中,我们把第三方服务抽离一个单独的服务,比如叫做:tsp _ Third Servic...原创 2019-09-19 14:25:05 · 734 阅读 · 0 评论 -
实战问题荟萃
文章目录一、部署1、如何确保你改动的代码所影响的要部署微服务模块?一、部署1、如何确保你改动的代码所影响的要部署微服务模块?背景:我们项目是微服务的,修改了fsc的代码,只用部署fsc即可。20190804上周发布的时候,修改了一个枚举类:InfluenceGroup,增加了一个类型。该枚举在fsc模块,因此我在发布模块中维护的是fsc。问题:Cat中报警bff错误,因为bff在我代码...原创 2019-08-05 11:55:12 · 123 阅读 · 0 评论 -
逝去的七月
七月的成长八月的计划 @Override public UserInfluenceValueReportDTO transform(UserInfluenceValueReport object, TransformContext context) { if (object == null) { return null; } UserInfluenceValueReport...原创 2019-07-31 15:17:14 · 209 阅读 · 0 评论 -
Jetty部署WEB项目?
各位读者,五一快乐!我们微服务用Tomcat部署,部分服务比如bdc服务部署起来非常慢,至少要2-4分钟吧。如果你修复Bug效率不是很高,DEbug几下,每次都要重新部署,非常忧心啊…目的:加快启动速度。目录一、为何不热部署?二、如何用Jetty部署?三、总结一、为何不热部署?怎么办呢?1、热部署2、换一种方式部署——Jetty.热部署:热部署,有的项目行得通,我们的项目基...原创 2019-05-03 11:08:18 · 9755 阅读 · 0 评论 -
8080端口永远被占用?
小伙伴们,五一快乐!端口被占用的解决办法非常简单,资料一大堆。解决方案无非是:Windows:netstat -an | findstr “8080”Mac:lsof -i:8080或者sudo lsof -i:8080然后都是 kill -9 PID不知道是我的情况特殊还是怎么回事,我的8080端口永远都被占用着…那我怎么解决这个问题的呢?修改端口号。很奇怪,很多场景下,80...原创 2019-05-03 09:14:56 · 508 阅读 · 0 评论 -
数据流系列-2-前后端数据传输技巧2
各位小伙伴,晚上好!这里分享下后端定义前端需传入的参数:*Command的技巧之一:使用Map<>传参和返回给前端的DTO技巧之一:自定义反序列化。目录一、Command定义技巧(前端需传入的参数封装)二、自定义反序列化三、总结一、Command定义技巧(前端需传入的参数封装)在大专家,后端把前端需要传入的参数多封装成Command,返回给前端的封装成DTO。Comm...原创 2019-03-28 20:31:37 · 767 阅读 · 0 评论 -
数据流系列-1-返回前端数据技巧
1、背景2、代码3、总结一、背景各位小伙伴,晚上好。这里总结一个在返回前端数据中的技巧结论:在封装的返回前端的DTO中,如果考虑到前端在给DTO一个属性赋值时候,每次都需要构造一个容器,那么可以在DTO中事先处理。比如:DivisionDTO中有个属性List subDivisions,那么要返回DTO的时候,一般会这么做:1、构造一个List<Object> lists...原创 2019-03-28 20:16:05 · 1010 阅读 · 0 评论