
JAVA
文章平均质量分 52
黄大仁很大
这个作者很懒,什么都没留下…
展开
-
tomcat处理微信扫码登录等第三方应用回调的过程
最近在写一个整合微信扫码登陆、微信扫码支付的项目。当微信扫码登录成功或者扫码支付成功后,微信会执行回调过程,通知我们的后端应用,然后我们的后端应用根据回调的请求进行相应的业务处理,选择性的向前端(前后的分离项目)传递数据或进行重定向。于是我有了这样的问题:微信发出的回调请求,request是微信发出的,按道理来说我们的response也应该是返回给微信的,而实际情况是response是给了我们前端。于是我做了以下试验:通过debug,查看调用微信二维码的request和微信回调的request是否一致。原创 2022-06-16 23:51:02 · 717 阅读 · 1 评论 -
怎么使用BigDecimal保证小数运算的精度
问题:在计算机二进制存储小数中,存在精度丢失的现象对小数进行运算时,结果会失真原因:小数在计算机中存储的方式造成的。其存储方式是对小数点后的数乘2,大于1的记录为1,小于1记录为零,知道小数点后的数都为零,如下所示,0.1按照这种方式是乘不尽的。0.1 * 2 = 0.2 -----00.2 * 2 = 0.4 -----00.4 * 2 = 0.8 -----00.8 * 2 = 1.6 -----10.6 * 2 = 1.2 -----10原创 2021-07-12 16:09:43 · 947 阅读 · 3 评论 -
java数组赋值运算时自增自减的问题——a[t] = tmp[t++]和a[t++] = tmp[t]的区别
问题的发现:在手写归并排序中,写到对原数组进行更新赋值的时候,把t++放在了被赋值数组里面。如图。结果发现程序报数组下标越界了,当把t++放在赋值数组里时,程序就正常运行。分析我们都知道,t++中,++放在后面,表示先执行表达式,再执行自增操作。按道理讲a[t] = tmp[t++]和a[t++] = tmp[t]应该都是先执行:a[t] = tmp[t];再执行:t++;结果应该是一致的才对,但是上面问题告诉我们,他们并不一样,于是抱着探究到底的精神,我用javap -c xxx.原创 2021-07-08 11:45:30 · 996 阅读 · 2 评论 -
小黄做的算法题
树的深度题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题解:给出一颗二叉树,求树的最大深度,也就是从根节点到所有叶子节点中的最大值方法一:分治法简介:求一个规模为n的问题,先求左边规模大约为n/2的问题,再求右边规模大约为n/2的问题,然后合并左边,右边的解,从而求得最终解。具体可参考归并排序。步骤: 1. 求 pro(left, rigth) -> int 2. 先求pro(left, (left+原创 2021-04-17 21:49:46 · 3782 阅读 · 0 评论 -
各线程安全容器都是怎么实现线程安全的?
首先什么是线程安全?原子性这一点,跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效)。一致性(可见性)可见性是指,当多个线程并发访问共享变量时,一个线程对共享变量的修改,其它线程能够立即看到。可见性问题是好多人忽略或者理解错误的一点。顺序性顺序性指的是,程序执行的顺序按照代码的先后顺序执行。ConcurrentXXX系列用ConcurrentHashMap作为例子来讲。1.8之后,ConcurrentHashMap的数据结原创 2021-04-16 20:32:41 · 195 阅读 · 1 评论 -
奇技淫巧——判断哪些服务器端口号被占用
具体操作创建ServerSocket时指定某端口号,如果创建成功,说明该端口号没有被占用,如果失败,说明被占用了。举例,以下java代码用于扫描1~65535之间的端口号for(int port=1;port<=65535;port++){ try{ServerSocket serverSocket=new ServerSocket(port);serverSocket.close(); //及时关闭ServerSocket }catch(IOException e){ S原创 2021-04-13 17:33:10 · 238 阅读 · 0 评论 -
java集合面试笔记
1.说说List,Set,Map三者的区别?List(对付顺序的好帮⼿): List接⼝存储⼀组不唯⼀(可以有多个元素引⽤相同的对象),有序的对象Set(注重独⼀⽆⼆的性质): 不允许重复的集合。不会有多个元素引⽤相同的对象。Map(⽤Key来搜索的专家): 使⽤键值对存储。 Map会维护与Key有关联的值。两个Key可以引⽤相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。2.Arraylist 与 LinkedList 区别?是否保证线程安全:ArrayL原创 2020-11-19 09:15:41 · 295 阅读 · 0 评论 -
JAVA基础面试笔记
1.重载和重写的区别 重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。 重写是子类对父类方法的重新改造,外部样子不变,内部逻辑可以改变2. java面向对象编程三大特性:封装 继承 多态封装 把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果属性不想被外界访问,也可以不提供方法。继承 使用已存在的类作为基础建立新的类。java只能继承一个父类,但是可以继承多个接口。多态 所谓多态就是指程序中定义的引⽤变量所指向的具体类型原创 2020-11-17 14:36:30 · 431 阅读 · 0 评论