![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 63
囧囧有神璐璐
天道酬勤
展开
-
异步调用方法出现数据无法查询
背景小伙伴有一个任务,需要在主链路进行操作后,异步进行计算当前节点的超时时间计算后进行保存,仓库实操人员每次进入操作页面都会进行计算当前属于自己的节点是否超时进行展示,如果有chao sh...原创 2021-06-04 21:50:45 · 1545 阅读 · 3 评论 -
手把手教你写一个无惧并发的递增Id(含java源码)
背景我们业务需要一个递增主键,返回长度是long,数据库是mysql思路1使用mysql的自增主键,或者模拟oracle的自增主键,不管什么可以保证自增就行。好处:简单。坏处:并不能保证丢失数据,并且每次获取都要读数据库,增加IO操作思路2基于思路1,考虑异步加载数据,使用一张表,异步修改表字段的值,内存中加载区间值,放在内存中。好处:保证获取值速度,支持高并发。坏处:重新启动...原创 2020-04-08 18:20:00 · 1019 阅读 · 0 评论 -
Java通过Executors提供四种线程池
http://cuisuqiang.iteye.com/blog/2019372Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newS转载 2017-10-16 17:03:19 · 317 阅读 · 0 评论 -
关于一个小学算数引发的思考
一个小学生的题目,光速每秒30万公里,根据光线的旅行时间,计算月球和地球,太阳和地球之间的距离。代码如下:public class Test{ // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 10000 * 1000; public static void main(String[] args)原创 2017-12-06 14:41:59 · 284 阅读 · 0 评论 -
关于预定产品引发的思考
看了一篇文章介绍预定产品的程序,很有趣,结果引发思考某商家生产的电子产品非常畅销,需要提前30天预订才能抢到手,同时还规定了一个会员可拥有的最多产品数量,目的是为了防止囤积压货肆意加价。会员的预订过程是这样的:先登录官方网站,选择产品型号,然后设置需要预订的数量,提交,符合规则即提示下单成功,不符合规则提示下单失败,后台的处理模拟如下:import java.util.Scanner;原创 2017-12-06 14:57:46 · 341 阅读 · 0 评论 -
包装类型的数据比较
基本类型是可以比较大小的,其所对应的包装类型都实现了Comparable接口,也说明了此问题,那我们来比较一下两个包装类型的大小,代码如下:public class Client27 { public static void main(String[] args) { Integer i = new Integer(100); Integer j = n转载 2017-12-06 17:28:23 · 839 阅读 · 0 评论 -
使用构造代码块精简程序
什么叫做代码块(Code Block)?用大括号把多行代码封装在一起,形成一个独立的数据体,实现特定算法的代码集合即为代码块,一般来说代码快不能单独运行的,必须要有运行主体。在Java中一共有四种类型的代码块:普通代码块:就是在方法后面使用"{}"括起来的代码片段,它不能单独运行,必须通过方法名调用执行;静态代码块:在类中使用static修饰,并用"{}"括起来的代码片段,用于静态变量初始转载 2017-12-06 18:35:27 · 225 阅读 · 0 评论 -
使用序列化类的私有方法巧妙解决部分属性持久化问题
部分属性持久化问题看似很简单,只要把不需要持久化的属性加上瞬态关键字(transient关键字)即可。这是一种解决方案,但有时候行不通。例如一个计税系统和一个HR系统,通过RMI(Remote Method Invocation,远程方法调用)对接,计税系统需要从HR系统获得人员的姓名和基本工资,以作为纳税的依据,而HR系统的工资分为两部分:基本工资和绩效工资,基本工资没什么秘密,绩效工资是保密的转载 2017-12-06 18:43:03 · 615 阅读 · 0 评论 -
java8新特性之逗号分隔字符串转List<Long>
业务背景:某个数据库字段,存储的是逗号分隔的id,可能是Integer也可能是Long型的,比如:1,2,3等;需要转换成Long型的List或者Integer型的List,怎么做更简便??见代码://You can use the Lambda functions of Java 8 to achieve this without looping//来自:http://转载 2017-12-27 16:42:28 · 17157 阅读 · 0 评论 -
JVM调优
JVM参数:参数名称含义默认值 -Xms初始堆大小物理内存的1/64(默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.-Xmx最大堆大小物理内存的1/4(默认(MaxHeapFreeRatio参数可以原创 2018-01-23 16:06:26 · 279 阅读 · 0 评论 -
Java编程:String 类中 hashCode() 方法详解
hash 的定义Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。转载 2018-01-31 14:46:28 · 392 阅读 · 0 评论 -
邪恶的编码魔咒,你中招没?
自从我观看了Gary Bernhardt所推崇的视频以后,就对某些编程语言的怪异表现着迷了。一些编程语言比其他语言有更多令人感到意外的表现。例如:有一整本关于Java语言的书,专门介绍它的边界类(Edge)及一些特性。相应的,对于C++语言我们可以参考它的标准规范,花上200美元即可。下面是我最喜欢的内容,是一些令人感到惊讶、搞笑的内容,还有一些像是魔咒。一般来说,使用这些有着特殊行为的代转载 2018-01-31 17:13:52 · 379 阅读 · 0 评论 -
关于计算整数是不是偶数奇数的理解
最近看到一篇文章判断整数是不是偶数奇数的,突然想到以前没有这个注意,坐下总结:import java.util.Scanner;public class Client21 { public static void main(String[] args) { // 接收键盘输入参数 Scanner input = new Scanner(System.i原创 2017-12-06 14:33:41 · 481 阅读 · 0 评论 -
易变业务使用脚本语言编写
Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy、Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的。为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示:灵活:脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,可以再运行期改变类型。 便捷:脚本语言是一种解转载 2017-12-05 18:44:49 · 298 阅读 · 0 评论 -
java设置一段代码执行的超时时间的简单方法
最近有需求说设置es搜索查询不能超时配置文件的毫秒数,所以正好使用的ExecutorService类,下面就ExecutorService使用做记录:ResultData resultData =null; ExecutorService executor = Executors.newCachedThreadPool(); FutureTask fut原创 2017-10-16 17:04:39 · 7611 阅读 · 2 评论 -
数据交换利器 Protobuf 技术浅析
由于最近公司采用protocol buffer(以下简称protobuf)来作为不同应用之间的数据交换,故最近一段时间研究了protobuf相关技术。在这里分享下。protobuf是什么?protobuf是google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式,只要实现相同的协议格式即同一pro转载 2017-10-16 17:28:08 · 451 阅读 · 0 评论 -
如何判断int、double、float类型数据为0或判断一个未知数据类型的为0或相等
这个判断适合很多语言,首先要明白一点:对于数字而言,放在程序里,整数占用4或者8个字节,小数则占用8个字节字面量整数的类型是int,比如:10的数据类型是:int,所以:int a = 10 编译器才不会报错字面量小数的类型是double和float(目测C语言对这个分得不是太清楚,搞得我也很糊涂),比如:1.0的数据类型是:double,所以:int a = 1.0 (在java中转载 2017-10-25 11:09:06 · 11469 阅读 · 0 评论 -
TCP粘包,拆包及解决方法
转自:http://blog.insanecoder.top/tcp-packet-splice-and-split-issue/在进行Java NIO学习时,发现,如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常会遇到的粘包以及拆包的问题。我们都知道TCP属于传输层的协议,传输层除了有TCP协议外还有UDP协议。那么转载 2017-10-16 17:52:17 · 245 阅读 · 0 评论 -
netty的tcp粘包与拆包
摘要: 粘包拆包问题是处于网络比较底层的问题,在数据链路层、网络层以及传输层都有可能发生。我们日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生这个问题,因此这篇文章只讨论发生在传输层的TCP粘包拆包问题。粘包拆包问题是处于网络比较底层的问题,在数据链路层、网络层以及传输层都有可能发生。我们日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生这个问转载 2017-10-16 17:56:32 · 175 阅读 · 0 评论 -
每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到转载 2017-10-17 11:19:11 · 128 阅读 · 0 评论 -
高并发的核心技术中如何实现幂等性问题的研究
链接:https://www.zhihu.com/question/27744795/answer/234251693来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 2. 我们发转载 2017-10-17 14:08:48 · 4008 阅读 · 0 评论 -
java list按照元素对象的指定多个字段属性进行排序
ListUtils.java---功能类package com.enable.common.utils;import java.lang.reflect.Field;import java.text.NumberFormat;import java.util.Collections;import java.util.Comparator;import java.ut转载 2017-10-26 20:17:42 · 908 阅读 · 0 评论 -
Git工作流指南:Gitflow工作流
这节介绍的Gitflow工作流借鉴自在nvie的Vincent Driessen。Gitflow工作流定义了一个围绕项目发布的严格分支模型。虽然比功能分支工作流复杂几分,但提供了用于一个健壮的用于管理大型项目的框架。Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。除了使用功能分支,在做准备、维转载 2017-12-08 14:28:06 · 164 阅读 · 0 评论 -
关于switch case break建议
有时候我们写switch case 的时候回忘记写break,造成错误。public static void main(String[] args) { System.out.println(toChineseNuberCase(0)); } public static String toChineseNuberCase(int n) { St原创 2017-12-05 18:41:55 · 373 阅读 · 0 评论 -
从年会看声明式编程(Declarative Programming)
React的设计贯彻了声明式编程(Declarative Programming)的思想,今天就说一说什么是所谓的声明式编程。和声明式编程相对应的是命令式编程(Imperative Programming),大部分语言的hello world都是从命令式编程开始的。什么是声明式编程?可以从一个现实中的例子来说明,这个例子就是年会。举个年会的栗子作为我国科技公司的一个特色,每年春转载 2018-01-08 11:37:34 · 338 阅读 · 0 评论 -
面试题目
分类 题目 难度系数 标准评判(在此定义0-5分内容应该回答成什么样子) 分类 题目 难度系数 标准评判(在此定义0-5分内容应该回答成什么样子) Java基础 垃圾回收机制 线...转载 2018-08-10 23:25:40 · 2628 阅读 · 6 评论 -
Java并发之AQS详解
一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。 以下是本文的目录大纲:概述框架...转载 2018-05-31 20:19:55 · 199 阅读 · 0 评论 -
用CAS实现volatile原子性方式简介
前一篇文章中提到原子操作,也许大家和我一样很好奇为什么AtomicInteger.increment方法能保证原子性,而简单的++运算却不能保证原子性。这篇文章我们就从AtomicInteger类下手分析源码,来了解一下原子操作的实现原理,但是分析源码之前需要来一段小小的前奏。CPU内存架构现代计算机都是多处理机CPU,每个核心(Core)都有一套寄存器,CPU访问寄存器的速度是最快的,但是访问R...转载 2018-05-31 20:51:08 · 1445 阅读 · 0 评论 -
Java多线程复习与巩固--volatile关键字与CAS操作
前一篇文章中提到原子操作,也许大家和我一样很好奇为什么AtomicInteger.increment方法能保证原子性,而简单的++运算却不能保证原子性。这篇文章我们就从AtomicInteger类下手分析源码,来了解一下原子操作的实现原理,但是分析源码之前需要来一段小小的前奏。CPU内存架构现代计算机都是多处理机CPU,每个核心(Core)都有一套寄存器,CPU访问寄存器的速度是最快的,但是访问R...转载 2018-06-01 08:34:14 · 254 阅读 · 0 评论 -
Apache Thrift - 可伸缩的跨语言服务开发框架
前言:目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善。本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩...转载 2018-06-27 13:41:20 · 229 阅读 · 0 评论 -
关于调用第三方报错消息的认知
今天主要和第三方支付公司进行支付接口的对接,前期已经对接过,但是姿势不正确,修改成成姿势正确的步骤。遇到的问题: 由于是restTemplate发送post请求,故使用main方法调用。调用报错401 Unauthorized 未授权。想到的解决方案:遇到这个错误肯定是调用接口的签名signature或者token不正确,故询问为何不正确,帮助我查看code哪里不正确,...原创 2018-08-10 23:20:42 · 834 阅读 · 0 评论 -
关于对接支付系统的一点思考
最近在工作中负责对接支付,期间遇到了很多的问题,值得反思的问题很多,下面记录下来,为后来人做个借鉴。1,首先也是最重要的一点,保证网络的畅通无阻,开发,测试,生产环境。可以提出的建议是,双方开发个pingpong接口,使用postman调用一下,看看网络情况。如果对方不合作,那就调用查询接口,查看返回情况。2,针对接口文档的认知性,有可能对方给的文档都不是最新的文档,但是对方也不提供最新的...原创 2018-08-18 20:34:39 · 1260 阅读 · 0 评论 -
使用google guava做内存缓存
google guava中有cache包,此包提供内存缓存功能。内存缓存需要考虑很多问题,包括并发问题,缓存失效机制,内存不够用时缓存释放,缓存的命中率,缓存的移除等等。 当然这些东西guava都考虑到了。guava中使用缓存需要先声明一个CacheBuilder对象,并设置缓存的相关参数,然后调用其build方法获得一个Cache接口的实例。请看下面的代码和注释,注意在注释中指定了Cache...转载 2018-08-31 13:41:55 · 1211 阅读 · 0 评论 -
处理restTemplate的messageConverters设置StringHttpMessageConverter
背景: 调用第三方接口,返回中文是乱码解决方案: private void setUtf8(RestTemplate restTemplate) { List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters(); i...原创 2019-01-15 11:43:18 · 11350 阅读 · 0 评论 -
关于线上一次超时处理引发的思考
关于线上一次超时处理引发的思考背景最近关于线上关于注册问题有超时2s的情况发生,最长时间已经是9s多,上游系统最多只能等待2s就返回超时失败。影响造成线上上游系统出现注册失败,影响非常不好。告警邮件和短信频发。问题排查链路&解决方案各系统检查自己对应接口耗时情况,运维负责检查osg&nginx问题,由于我负责的是最下游系统,我检查我的接口超时情况,偶尔有个别的超时,...原创 2019-07-19 13:14:13 · 439 阅读 · 0 评论 -
秒杀系统架构优化思路
一、秒杀业务为什么难做1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如:12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相...转载 2018-06-14 16:50:26 · 321 阅读 · 2 评论 -
CODE REVIEW中的几个提示
Code Review应该是软件工程最最有价值的一个活动,之前,本站发表过《简单实用的Code Review工具》,那些工具主要是用来帮助更有效地进行这个活动,这里的这篇文章,我们主要想和大家分享一下Code Review代码审查的一些心得。首先,我们先来看看Code Reivew的用处:Code reviews 中,可以通过大家的建议增进代码的质量。Code reviews 是一个传递知识的手...转载 2018-06-14 16:23:56 · 629 阅读 · 0 评论 -
JVM调优
JVM参数:参数名称含义默认值 -Xms初始堆大小物理内存的1/64(<1GB)默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.-Xmx最大堆大小物理内存的1/4(<1GB)默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制-Xmn年轻代大小(1.4or ...原创 2018-06-12 08:56:34 · 213 阅读 · 0 评论 -
Java List<Object>去掉重复对象-java8
一、去除List中重复的Stringpublic List removeStringListDupli(List stringList) { Set set = new LinkedHashSet<>(); set.addAll(stringList); stringList.clear(); stringList.addAll(set); retu转载 2018-01-10 19:23:23 · 2540 阅读 · 0 评论 -
函数 toPlainString() 和 toString()
对于 BigDecimal b ; (b=(0.4321)^ 20) String s = b.toPlainString() ; System.out.println(s) ; 输出为: 0.00000005148554641076956121994511276767154838481760200726351203835429763013462401若String s = b.toString...转载 2018-02-27 16:13:30 · 7489 阅读 · 0 评论