java技术
文章平均质量分 63
丶自定义
学无止境!
展开
-
【转载】图解 Java 中那 18 把锁
乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。回到代码世界中,一个共享数据加了悲观锁,那线程每次想操作这个数据前都会假设其他线程也可能会操作这个数据,所以每次操作前都会上锁,这样其他线程想操作这个数据拿不到锁只能阻塞了。在 Java 语言中synchronized和ReentrantLock等就是典型的悲观锁...转载 2022-02-15 10:23:10 · 363 阅读 · 0 评论 -
【异步并行案例】CompletableFuture
【场景】当一个接口需要调用多个外部接口的时候,自己的接口会随着调用外部接口的耗时增加而增加,如果多个外部接口并行,那么自己接口至少需要多个外部接口的总耗时才能响应,如果多个外部接口异步请求,便可大大节省请求外部接口所耗时。具体请看下图:以下简单的写了下代码,类似的实现方式: private ExecutorService executor = Executors.newFixedThreadPool(3); @Test void test01() throws Ex..原创 2021-12-30 16:19:12 · 548 阅读 · 0 评论 -
java 手机号脱敏处理 String.replaceAll()方法
String mobile = "12345678901";String s1 = mobile.replaceAll("(\\d{3})\\d*(\\d{1})", "$1****$2");String s2 = mobile.replaceAll("(\\d{3})\\d*(\\d{2})", "$1****$2");String s3 = mobile.replaceAll("(\\d{3})\\d*(\\d{3})", "$1****$2");String s4 = mobile.repl.转载 2021-08-20 18:00:06 · 2965 阅读 · 0 评论 -
图文并茂:HashMap 经典详解!
什么是HashMap?HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的数据结构在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。文字描述永远要配上图才能更好的讲解数据结构,HashMa转载 2020-11-10 14:51:51 · 135 阅读 · 0 评论 -
二叉树的基础---四种遍历方式的
1. 基本介绍树结构多种多样,但是最常用的还是二叉树。二叉树中每个节点最多有两个子节点,这两个节点分别是左子节点和右子节点。注意:不要求都有两个子节点,可以只有左子节点,也可以只有右子节点。2. 二叉树的存储2.1. 链式存储法每个节点至少有三个字段,其中一个存储数据,另外两个是指向左右子节点的指针。这种存储方式比较常用,大部分二叉树代码都是通过这种结构来实现的。2.2. 数组存储法我们把根节点存储在下标 i=1 的位置,它的左子节点存储在下标为 2 *...转载 2020-08-12 20:46:25 · 294 阅读 · 0 评论 -
死循环while/for中new对象? 不怕 OOM 吗?
一、前言今天遇到一个又去的问题,在死循环中new对象,会造成 OOM 吗?把这问题发到技术群中,有说会,有说不会的,引起一片热论。我们还是来个demo模拟一下,看看什么结果吧二、模拟在死循环中new对象代码如下: public static void main(String[] args) { while (true) { try { log.info("new"); .原创 2020-07-01 15:48:44 · 2179 阅读 · 2 评论 -
图解!一文彻底弄懂九大常见数据结构!
数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。常用的数据结构可根据数据访问的特点分为线性结构和非线性结构。线性结构包括常见的链表、栈、队列等,非线性结构包括树、图等。数据结构种类繁多,本文将通过图解的方式对常用的数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。1数组数组可以说是最基本最常见的数据结构。...转载 2020-06-19 14:27:31 · 555 阅读 · 1 评论 -
计算机网络体系结构划分
网上浏览视频,听歌,聊天,计算机是怎么在“你”、“我”之间传送数据?一、什么是TCP/IP协议? 首先我们看下什么是协议? 协议(Protocol)是为进行网络中的数据交换而建立的规则、标准或约定。用于不同系统中实体间的通信。两个实体要想通信,必须有同一种语言,而且,对于通信内容,怎样通信和何时通信,都必须遵守一定的规定,这些规定就是协议。 在互联网通信中,最重要和著名的就是TCP、IP两个协议,但是我们现在常说的TCP/IP协议并不是单指着两种协议,而是整个TCP/IP协议族。二、计.转载 2020-06-10 14:22:52 · 1983 阅读 · 0 评论 -
TCP三次握手原理
在众多的网络协议中,TCP协议占据着举足轻重的地位,你知道什么是TCP协议吗?一、TCP协议TCP(Transmission Control Protoco)协议属于计算机网络体系中的运输层。运输层的任务是负责向主机中应用层进程之间的通信提供通用的数据传输服务。所以可以通俗理解TCP协议就是进程间数据通讯传输协议。根据不同应用,运输层主要使用TCP和UDP两种协议之一。如果想要了解计算机网络体系分层概念,可以看我的上一篇博文 计算机网络体系结构划分二、TCP协议特点TCP协议本身是.转载 2020-06-10 11:02:01 · 531 阅读 · 0 评论 -
听我讲完Http的GET、POST原理,面试官给我倒了杯卡布奇诺
我有一个老朋友,我们叫他熊猫。发际线及将触碰到后脑勺,大框金丝眼镜也掩盖不住那黝黑的眼圈,显得格外的“程序员”;穿着也非常“不拘一格”,上半身是衬衣西服,下半身是牛仔裤配拖鞋。我和熊猫的感情很好,毕业后他去了上海而我开始北漂,但每次过节回老家我俩都会和朋友们一起吃饭,这次回家过年也不例外,我们朋友几个去了枣庄出名的小板凳酱骨头,饭后他给我们聊了聊4年前来这家公司的面试经历,据说跟面试官有着一番精彩的博弈;我们听得津津有味。以下是熊猫和面试官刘经理的对话。面试官:小李啊,你们常用的HT转载 2020-06-10 10:21:31 · 219 阅读 · 0 评论 -
AspectJ的使用方法
一、简介它不属于spring; AspectJ是一个AOP的框架; 定义了AOP语法; 有一个专门的编译器用来生成遵守Java字节编码规范的Class文件什么是AspectJAspectJ是使用面向切面的一个框架它扩展了Java语言(它本身也是一种语言)支持原生Java代码 有自己的编译器将代码翻译成Java字节码文件是为了方便编写AOP代码而出现的使用AOP编程的三个重点 通知 切点 织入二、实现AOP的方式1、方式一: xml配置实现AOP1.1、创建通知原创 2020-06-04 16:19:52 · 8174 阅读 · 2 评论 -
Map 集合怎么也有这么多坑?一不小心又踩了好几个!
上一篇List 踩坑文章中,我们提到几个比较容易踩坑的点。作为 List 集合好兄弟 Map,我们也是天天都在使用,一不小心也会踩坑。今天我就来总结这些常见的坑,再捞自己一手,防止后续同学再继续踩坑。本文设计知识点如下:不是所有的 Map 都能包含 null这个踩坑经历还是发生在实习的时候,那时候有这样一段业务代码,功能很简单,从 XML 中读取相关配置,存入 Map 中。代码示例如下:那时候正好有个小需求,需要改动一下这段业务代码。改动的过程中,突然想到HashM...转载 2020-05-13 10:43:11 · 156 阅读 · 0 评论 -
一口气带你踩完五个 List 的大坑,真的是处处坑啊!
List 可谓是我们经常使用的集合类之一,几乎所有业务代码都离不开 List。既然天天在用,那就没准就会踩中这几个 List 常见坑。今天我们就来总结这些常见的坑在哪里,捞自己一手,防止后续同学再继续踩坑。本文设计知识点如下:ArrayList 这是李逵,还是李鬼?以前实习的时候,写过这样一段简单代码,通过Arrays#asList将数组转化为 List 集合。这段代码表面看起来没有任何问题,编译也能通过,但是真正测试运行的时候将会在第 4 行抛出 Unsupporte...转载 2020-05-13 10:24:20 · 242 阅读 · 0 评论 -
每天都在用 Map,这些核心技术你知道吗?
本篇文章站在多线程并发安全角度,带你了解多线程并发使用HashMap将会引发的问题,深入学习ConcurrentHashMap,带你彻底掌握这些核心技术。全文摘要: HashMap核心技术 ConcurrentHashMap核心技术 分段锁实战应用 HashMapHashMap是我们经常会用到的集合类,JDK 1.7 之前底层使用了数组加链表的组合结构,如下图所示:新添加的元素通过取模的方式,定位Table数组位置,然后将元素加入链表头部,...转载 2020-05-13 10:03:46 · 128 阅读 · 0 评论 -
Guava LoadingCache详解及工具类
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的? 缓存在很多系统和架构中都用广泛的应用,例如: 1.CPU缓存 2.操作系统缓存 3.本地缓存 4.分布式缓存 5.HTTP缓存 6...转载 2020-04-16 14:13:58 · 5252 阅读 · 1 评论 -
Spring boot的ClasssLoader加载和卸载jar/class
一.前言在开发过程中,有时候需要动态加载各种jar/class到程序中,然而又只使用一次,或者加载的jar/class中有改动需要持续升级。程序一直在运行,每次加载进去的jar/class如果过多,对系统会造成很大的压力,而且已经加载进去的jar/class不能覆盖,从而造成得不到想要的结果。此时就需要考虑对加载进去的jar/class进行卸载。二.思路我们知道,当一个java类...原创 2019-12-10 14:59:28 · 4684 阅读 · 0 评论 -
【后端技术教材汇总】学会了这些技术,你离BAT大厂不远了
https://blog.csdn.net/z694644032/article/details/100084287 /////\\\\\ /////|||||\\\\\ /...原创 2019-11-19 10:31:48 · 181 阅读 · 0 评论 -
docx、ppt、xls、pdf文件转html(转)
此博客转自:https://blog.csdn.net/fyhx2010/article/details/69569310场景:后台上传的文档要再前端app上在线预览解决办法:将文档转成html用于前端显示maven引入[plain] view plain copy<dependency> <groupId>fr.opensagres.xdocre...转载 2018-04-27 11:56:20 · 1487 阅读 · 0 评论 -
quartz 定时任务时间密码配置
在线生成点击此处☞☞☞cron在线生成器说明:这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 ...原创 2019-02-15 12:02:39 · 408 阅读 · 0 评论 -
Java线程安全和非线程安全
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringB...转载 2019-03-22 09:45:02 · 142 阅读 · 0 评论 -
Java主线程等待子线程、线程池
public class TestThread extends Thread { public void run() { System.out.println(this.getName() + "子线程开始"); try { // 子线程休眠五秒 Thread.sleep(5000); ...转载 2019-03-22 11:48:03 · 410 阅读 · 0 评论 -
【超详细】SpringBoot与Shiro整合-权限管理实战实操(附源码地址)
一、搭建SpringBoot开发环境1. 安装好开发软件和Maven等开发工具:Spring Tool Suite(TST)Maven :3.3.9。jdk:1.82. 创建springboot项目(此功能需要联网)3. pom.xml文件配置<?xml version="1.0" encoding="UTF-8"?><projec...原创 2019-04-02 17:22:12 · 9071 阅读 · 19 评论 -
第一次上传push项目文件到git上
通过命令行创建一个新的版本库touch README.mdgit initgit add README.mdgit commit -m "first commit"git remote add origin ssh://admin@10.10.10.10:29418/test/testCase.gitgit push -u origin master通过命令行推送一个已存在的...原创 2019-06-19 15:59:56 · 1760 阅读 · 0 评论 -
使用java代码执行linux/cmd命令(解决 waitFor() 阻塞/锁死 问题)
场景:java在企业级项目开发中,需要调用exe、shell这样的程序或脚本。在Java中提供了两种方法来启动其他程序:(1) 使用Runtime的exec()方法(2) 使用ProcessBuilder的start()方法 。Runtime和ProcessBulider提供了不同的方式来启动程序,设置启动参数、环境变量和工作目录。但是这两种方法都会返回一个用于管理操作系统进程...原创 2019-09-26 10:47:06 · 3604 阅读 · 0 评论 -
Html文档转换为PDF文档(转)
此博客转自:https://blog.csdn.net/chengp919/article/details/80096725html页面导出为pdf(jsPDF、iText、wkhtmltopdf)https://blog.csdn.net/huyuyang6688/article/details/79710704用iText实现html字符串转PDF参考这个网址:https://blog.csd...转载 2018-04-27 11:52:05 · 1090 阅读 · 1 评论