java基础知识
java基础知识、面向对象编程、集合类处理、多线程等
shy078
本人活泼开朗,热爱篮球,热爱编程,想找到一份理想的工作。
展开
-
打开Redis分布式锁的正确方式
使用redis实现分布式锁的目的是防止多台机器共享同一资源,保证该资源只在某一台机器处理,且只处理一次,但是使用redis实现分布式锁时需要保证以下两点,(1)设置key和过期时间需要在同一个事务内完成(2)设置key和删除key的属于同一个客户端根据以上分析,我们使用spring-data-redis实现分布式锁的加锁和删除功能,talk is cheap,show your code.1、引用的包,核心包是: <!-- spring data redis -->原创 2020-11-30 11:10:17 · 171 阅读 · 0 评论 -
基于maven的项目结构搭建
1、项目分层在进行项目开发的时候,需要项目结构搭建,本文主要讲解基本maven管理的项目结构搭建,在阿里规约中规定一般分为:(1)web层:主要是对访问控制进行转发,各类基本参数校验、异常处理等。(2)开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web封装成 http 接口;进行 网关安全控制、流量控制等。(3)Service层:相对具体的业务逻辑服务层。(4)Manager 层:通用业务处理层,它有如下特征:(4.1)对第三方平台封装的层,预处理返回结果及转化异常信原创 2020-09-27 17:46:18 · 269 阅读 · 0 评论 -
JSON字符串转泛型类型
1、定义一个泛型对象HttpResult2、将返回的JSON字符串解析成该类型,然后进行后续业务处理/*** 泛型转型* @param json JSON字符串* @param clazz 类型* @param 泛型* @return 转换之后的泛型*/private static HttpResult parseHttpResult(String json, Class clazz) {return JSONObject.parseObject(json, new TypeRef原创 2020-07-08 19:52:44 · 1354 阅读 · 0 评论 -
骚年,Java值传递你会吗
骚年,Java值传递你会吗值传递和引用传递Java中的值传递总结值传递和引用传递1、值传递是通过方法对传入值操作后,并不会改变传入的值2、引用传递是通过方法对传入的值操作后,会改变传入的引用指向数据Java中的值传递Talk is cheap, show your code。/** * @author : cuantianhou 2020/4/30 */public class...原创 2020-04-30 17:29:20 · 188 阅读 · 2 评论 -
Https的安全通信机制保证
1、加密方式2、Https安全通信机制参考文章:https://blog.csdn.net/guolin_blog/article/details/104546558?depth_1-utm_source=distribute.pc_feed.none-task-blog-alirecmd-12&request_id=&utm_source=distribu...原创 2020-04-17 16:01:53 · 138 阅读 · 0 评论 -
SimpleDateFormat线程安全测试用例
众所周知 SimpleDateFormat在多线程环境下是不安全的,具体可以参考https://blog.csdn.net/csdn_ds/article/details/72984646,其本质原因是多线程存在共享变量,导致数据处理结果不一致甚至错误,具体的解决方案:(1)将共享变量设置为局部变量,每个线程私有化;(2)在使用共享变量的时候进行加锁处理,虽然可以解决问题,但是效率低下;...原创 2020-04-08 17:35:11 · 217 阅读 · 0 评论 -
你写了个Bug之集合判断包含元素
有时你会发现,Bug测试没测出来,结果生产跑出来了,只能一句mmp,无情啊。通常,我们会使用HashSet作为集合判断是否包含某一元素,show codepublic class Test{public static void main(String []args){ HashSet<String> setString = new ...原创 2020-01-02 19:37:51 · 357 阅读 · 1 评论 -
HashMap的put操作
1、HashMap的put操作(基于JDK1.7)问题1:初始化主要包括哪些操作?问题2:计算key的hash值?问题3:计算桶的位置?问题4:插入当前key和value?扩容?扩容安全吗,原因是什么?问题5:对比JDK1.7和JDK1.8 HashMap?问题6:HashMap 的最佳实践?...原创 2019-12-31 10:31:13 · 425 阅读 · 0 评论 -
二叉搜索树之红黑树
红黑树红黑树红黑树的性质红黑树的插入按照二叉搜索树的插入方法插入当前节点的父节点为空,将颜色置为黑色,结束。当前节点的父节点颜色是黑色,结束当前节点的父节点颜色是红色,看叔叔节点的颜色叔叔节点的颜色是红色叔叔节点的颜色是黑色三角型直线型红黑树的删除搜索删除节点查找替换节点删除节点操作删除节点有两个后代删除节点无后代删除节点有一个后代修改双黑问题红黑树只有红色和黑色节点、弱平衡的二叉查找树红黑...原创 2019-12-22 16:37:03 · 207 阅读 · 0 评论 -
数据结构之线性表(Java版本)
线性表的存储分为:顺序存储和链式存储顺序存储的一种实现:ArrayList,数据量大的情况下,查找的效率高,删除和新增的效率低链式存储的实现:LinkedList,数据量大的情况下,查找的效率低,删除和新增的效率低下面给出简单的实现:ArrayList:package ds.list;/** * @author : cuantianhou 2019/12/19 */...原创 2019-12-19 17:18:13 · 159 阅读 · 0 评论 -
Spring-Quartz添加定时任务失败
项目启动添加定时任务失败失败原因:case1:定时任务的cron表达式设置的时间早于当前时间 case2: 设置的定时任务额cron表达式不合法解决方案:solution1:保证任务设置的执行时间晚于当前时间 solution2:保证corn表达式的正确性...原创 2019-12-19 16:45:04 · 724 阅读 · 0 评论 -
二叉树的代码实现 JAVA 版本
本文主要实现二叉树的简单功能:(1)二叉树的生成(2)二叉树的遍历:前序遍历,中序遍历,后序遍历,层次遍历(3)二叉树的删除(3)判断节点是否存在的功能package ds.tree;import ds.link.Node;import java.util.LinkedList;import java.util.Queue;/** * @author : c...原创 2019-12-18 17:32:41 · 128 阅读 · 0 评论 -
排序算法之快排与归并排序
1、快速排序适合数据量大,排序时间短,具体代码如下:package ds.sort;/** * @author : cuantianhou 2019/12/16 */public class QuickSort { /** * 主要思路:取基准数据,从数据高位寻找小于基准数据的值,然后用目标值替换低位置的值, * 然后从低位置寻找大于基准数据的...原创 2019-12-16 15:13:03 · 133 阅读 · 0 评论 -
建索引的几大原则
1、最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=1andb=2andc>3andd=4如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。2、=和in可以乱序,比如a=1and...原创 2019-12-15 14:52:27 · 152 阅读 · 0 评论 -
数据结构与算法
数据结构与算法数据结构数据结构的概念数据结构的存储顺序存储连续的存储空间链式存储非连续的存储空间 数据数据的逻辑机构集合结构线性结构 一对一数组 长度固定数组元素的添加step1: 创建一个新的数组step2: 遍历新的数组step3: 遍历到指定位置将元素添加进去数组元素的删除step1:创建一个数组step2:遍历旧的数组step3:遍历到指定位置将元素删...原创 2019-12-15 14:48:16 · 119 阅读 · 0 评论 -
异常处理
为了对异常统一处理,同时精简代码数量。public void dealException(Exception e){ if(e instance of 自定义异常){ 自定义异常处理代码块; return; } 系统异常处理代码块;}...原创 2019-12-11 10:27:40 · 128 阅读 · 1 评论 -
线程池执行流程图
1、通过ThreadpoolExecutor创建线程,关键的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueu...原创 2019-12-10 14:29:11 · 566 阅读 · 0 评论 -
基于JDK1.8的HashMap源码分析
基于JDK1.8的HashMap源码分析What is HashMap?Data Structer of HashMapDiagram of HashMapHow to use HashMap?HashMap Source CodeWhat is HashMap? The ability of appling one object to map another object is a go...原创 2019-11-26 15:10:28 · 137 阅读 · 0 评论 -
Generic
GenricWhat is Generic?Params are genericed. In order to implment generic, the java developer user type erasure to be compatible with the previous version of jdk. Therefor, the generic is not real ge...原创 2019-11-20 10:37:35 · 3748 阅读 · 0 评论 -
线程那点事
1、进程与线程概念 进程是资源分配的基本单位,线程是资源调度的基本单位。2、从JVM角度看线程:线程私有的内存空间:程序计数器、本地方法栈、虚拟机栈程序计数器:线程不是总被执行的,与CPU的调度算法相关,当线程被中断后,需要记录执行的位置,当恢复执行时,自动按记录的位置执行。本地方法栈、虚拟机栈:防止其他线程访问自己的数据。3、并发与并行的区别并发:同一时间...原创 2019-08-29 15:00:16 · 380 阅读 · 0 评论