![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 84
陈浩learning
熟悉java、东北大学软件学院毕业生,曾任职于美团, 目前聚焦于AR VR领域, 任职于Presence
展开
-
[一文搞定] java线程池技术
文章目录池化思想线程池的开销和好处线程池定义常见误用java实现线程池线程: java.lang.Thread线程池实现线程池状态阻塞队列拒绝策略Worker添加worker回收worker预热 WarmUpThreadPoolExecutor 钩子 扩展点线程池编程: 异常处理线程池注意事项多线程编程最佳实践常见场景线程池caseStudy参考链接池化思想核心思想是空间换时间,期望使用预先创建好的对象来减少频繁创建对象的性能开销,同时还可以对对象进行统一管理,减少对象使用成本。 池子中的对象在需要在原创 2021-07-13 22:34:06 · 630 阅读 · 0 评论 -
深入java注解开发 + spring注解开发
基于java1.8java注解: 介绍关于『注解』和『XML』两种不同的配置模式,争论了好多年了,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而 XML 相对于注解则是相反的。追求低耦合就要抛弃高效率,追求效率必然会遇到耦合。所有的注解都实现了java.lang.annotation.Annotation这个接口。所有的注解本质上都是接口。一个注解如果没有对应的处理器的话,其实就当于注释。注解处理器一般来说有两种实现(下文会给出示例),分为编译期扫描、运行时反射。注解.原创 2021-03-07 17:32:42 · 694 阅读 · 2 评论 -
Error:java: 服务配置文件不正确, 或构造处理程序对象
在学习注解处理器使用的时候,依据这个学习,完成后build,报了个错误:Error:java: 服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor: Provider annotation.MyProcessor not found时抛出异常错误我是使用maven的,不是使用教程的gralde,网上查找一番后,得到结果:<plugin> <groupId>org.apache.maven.plugins&原创 2021-02-19 15:57:50 · 5821 阅读 · 3 评论 -
一文带你深入了解 java和函数式编程
朋友, 进来看看呗~不变性是函数式编程的核心原则之一。例如Clojure,默认上变量是不可变的,如果你要改变变量,你需要把变量copy出去修改。这对于并行程序来说,bug会大大减少。java中可以通过final来实现。不可变的数据结构所有字段都是不可变的,其嵌套数据结构也要满足不可变性。除构造函数外应该没有其他的`set`方法。原创 2021-01-14 15:14:15 · 1686 阅读 · 5 评论 -
Future使用的这个坑你知道吗?
我做了下测试,发现Future如果没有调用`get()`方法不会抛出异常。经过我深入观察发现: 其实这个不是Future的锅,是`java.util.concurrent.ThreadPoolExecutor`的问题!原创 2021-01-13 19:10:35 · 1520 阅读 · 0 评论 -
[看源码神器]idea如何修改源码
下载源代码java8源码下载下来后解压关联自定义源码source修改源码关联source之后导入关联的源码文件夹就好。原创 2021-01-13 12:46:28 · 3021 阅读 · 1 评论 -
junit在main线程执行结束时就会退出执行
junit在main线程执行结束时就会退出执行junit不支持多线程测试,junit在main线程执行结束时就会退出执行。至于为什么会这样,网络上找了一些文章:// junit.textui.TestRunner#mainpublic static void main(String args[]) { TestRunner aTestRunner = new TestRunner(); try { // 开始执行测试代码 TestResult r =原创 2021-01-12 19:58:22 · 862 阅读 · 3 评论 -
一文搞懂: java是如何支持函数式编程的
文章目录java对函数式的支持函数式接口lambda表达式方法引用模式匹配java对函数式的支持java8提供了lambda表达式、方法引用、预定义函数接口来适配函数式编程。java将lambda表达式看做函数式接口的对象实例,但这在设计层面上就已经满足一等值的概念了。函数式接口jdk已经提供了一系列的函数式接口(Package java.util.function)了,例如Consumer、Supplier、Function、Predicate以及其他的出于拆箱装箱性能损耗的DoubleCons原创 2021-01-11 18:13:59 · 492 阅读 · 2 评论 -
写给大忙人看的: java和函数式编程
此处的函数不同于OOP中的方法,可以理解成数学中的`函数`,是一种将输入集与输出集关联的表达式。和命令式编程不同,函数式编程只取决于它的输入,不依赖于函数外状态。原创 2021-01-10 22:53:49 · 222 阅读 · 0 评论 -
一文搞懂: 响应式编程是什么?
当一个系统具有即时响应性(Responsive)、回弹性(Resilient)、弹性(Elastic)以及消息驱动(Message Driven)。 我们称这样的系统为反应式系统(Reactive System)。原创 2021-01-10 16:09:15 · 9823 阅读 · 9 评论 -
你真的知道Optional怎么使用吗?
Null可以带来一大堆问题,不提神出鬼没的NullPointException,就算采用防御式编程,代码中也会充斥着各种嵌套的null检查。而且这也破坏了java设计的哲学,java是一直试图避免让程序员意识到指针存在而努力的! Optional的设计思想很简单,就是对值包一层,如果`没有值`,就给出`Optional.empty()`,原理就如下图所示:原创 2021-01-07 20:07:08 · 2449 阅读 · 0 评论 -
最通俗易懂的HashMap深度解析
文章目录导言Hash表什么是Hash表为什么要Hash表Hash表核心原理核心概念Hash表hash函数常见冲突解决方法开放地址法(再散列法)再哈希法链地址法(拉链法)java HashMap原理浅析java HashMap核心AIP查增删其他快速失败机制 Fail-Fast总结参考文章导言数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。常见的原创 2021-01-07 19:21:25 · 951 阅读 · 2 评论 -
一篇文章快速搞懂 AOP和SpringAOP
随着软件世界不断复杂化,传统的OOP(面向对象)建模思路已经不足以很好的处理好开发时所面临的种种挑战,AOP(Aspect Orient Programming)应运而生,它和OOP建模方式并不冲突,它是OOP编程的一种有效补充。OOP面向名词领域建模,使用类作为单位来模块化目标系统,而AOP面向动词领域建模,其模块化单位则是`Aspect`:切面。常见于处理一些具有==横切性质==的系统级服务,例如: `日志管理、事务管理、安全检查缓存、对象池管理等`。原创 2021-01-07 09:52:42 · 1497 阅读 · 3 评论 -
10分钟入门SpringAOP
SpringAOP切面核心就一个地方: 被`@Aspect`注解的类,将这个类注入IOC容器中。之后在其中使用advice注解定义横切逻辑(利用`@Around、@After等`)。环绕切面配合`ProceedingJoinPoint`类使用,其他切面看情况使用`JoinPoint`或不带参。原创 2021-01-07 09:50:48 · 1312 阅读 · 2 评论 -
JMH入门实战,这篇就够了
文章目录一、JMH介绍1.1 JMH是什么1.2 为什么需要基准测试二、JMH基础使用2.1 POM依赖2.2 BenchMark代码2.2.1 @BenchmarkMode(Mode.AverageTime)2.2.2 @OutputTimeUnit(TimeUnit.MICROSECONDS)2.2.3 @State(Scope.Thread)2.2.4 @Benchmark2.2.5 @SetUp2.2.6 @TearDown三、JHM实战注意四、相关链接五、参考链接一、JMH介绍1.1 JMH是原创 2021-01-06 18:00:20 · 2373 阅读 · 1 评论 -
分布式事务,这篇够了
生活就像海洋,只有意志坚强的人,才能到达彼岸 —— 马克思文章目录一、导读二、分布式理论CAP理论BASE理论: AP理论的衍生三、分布式解决方案2PC策略原子性保障隔离性保障小结TCC协议原子性保障一致性保障隔离性保障Saga 协议小结四、参考文章一、导读事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,保整原子性、持久性、隔离性(执行过程中互不可见)、一致性,提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。分布式事务可以看为两块,一个是serv.原创 2021-01-03 23:45:01 · 3964 阅读 · 7 评论 -
[别翻了,这篇搞定] java中断机制
福祸由天不由我,我命由我不由天。一、导言线程A对线程B发出建议: 你好,可以停止了哟~在实际生产环境中,对于阻塞任务,可能存在一些情况导致阻塞任务取消、终止,例如: 计时器到期,I/O 完成,或者另一个线程的动作(释放一个锁,设置一个标志,或者将一个任务放在一个工作队列中)。这种情况下可以使用java的中断机制来进行线程间通信。java线程中断的实现是基于一个称为中断状态的内部标志位来实现的,其中断的含义更像是建议,一个线程如何响应另一个线程的中断完全取决于程序员: 继续向上抛出、封装后抛出.原创 2021-01-02 22:25:53 · 4440 阅读 · 8 评论 -
[java8]深入浅出-方法引用
无论明日,有多落魄,至少今天,没有蹉跎。 《人性的优点》一、背景java8是一个跨越式的版本更新,首次把函数当做一个"值"(以等值)来进行传递、动态生成、赋值。而不是看做类、接口(二等值)一个层次的东西。编程语言的整个目的在于操作之,这些值被叫做一等值。编程语言中的其他结构有助与表示值的架构,但在程序执行期间不能传递因此是二等值。1.1. 设计原因lambda表达式在java8的函数式编程中起到了关键作用,而方法引用则是对lamda的一个有力补充。对lambda的简化: 如果只是简单的.原创 2020-12-30 17:01:09 · 1167 阅读 · 0 评论 -
[java并发]深入浅出条件队列-wait、notify、notifyall
君子生非异也,善假于物也 —— [荀子]·[劝学]一、导言条件队列灵活,但用错也十分容易。一般来说能用BlockingQueue、Latch、Semaphore、Future等高级工具实现的就不要直接使用条件队列。 ——<<java并发编程实战>>java的内置的条件队列存在一些缺陷,每个内置锁(基于synchronize块)都只能有一个关联的条件队列,因此可能存在多个线程因不同的条件谓词不满足而在同一个条件队列上。这个特性很可能就会导致"通知丢失"(不使用notify.原创 2020-12-30 16:04:01 · 4893 阅读 · 8 评论 -
[java 并发]深入浅出 CountDownLatch
一、导言公交车来了,小明、小红要等小军来才上公交车,但是小军迟迟不来,于是小明和小红都迟到了。CountDownLatch直译为闭锁,CountDown就是表示倒计时的意思,Latch表示门栓的意思,CountDownLatch和门栓的含义有点像,可以看做代码执行时的一个门栓,条件不满足就进不了“门”(代码无法继续执行),此处的条件就是“latch”数字为0。常见于以下几种使用场景(如果还有其他的使用场景,麻烦在评论区补充出来,欢迎交流沟通)。实现最大并行性:当所有线程都满足与某个条件(lat原创 2020-12-28 23:48:07 · 647 阅读 · 2 评论 -
[java 随机数] ThreadLocalRandom、Random
[java 随机数] ThreadLocalRandom、Random真理具有相对性。----马克思文章目录[java 随机数] ThreadLocalRandom、Random一、什么是随机数: 真随机数? 假随机数?二、Random和ThreadLocalRandom的区别?2.1 Random使用以及原理浅析2.1.1 基础使用2.1.2源码浅析2.1.3 Random性能问题2.2 ThreadLocalRandom使用和原理浅析2.2.1 基本使用2.2.2 源码浅析参考链接计算机世界原创 2020-12-28 14:08:38 · 1209 阅读 · 0 评论 -
[idea插件推荐] 键盘流最爱,开发快到飞起
导言磨刀不误砍柴工,好的开发环境对开发效率的影响是毋庸置疑的,以下推荐一些我常用的idea插件必装插件Lombok几乎是每个项目都有用的lombok, 必安。Maven Helper便于直观查看maven依赖冲突的问题Alibaba Java Coding Guidelines各种规范提示,写出更优秀、优美的代码Free MyBatis pluginfree-idea-mybatis是一款增强idea对mybatis支持的插件,主要功能如下:生成mapper xml文件快速从代码原创 2020-12-28 10:52:43 · 1990 阅读 · 1 评论 -
架构入门与架构师职责
这篇文章只是我对于架构认识的一些观点,如果您不认同我的观点或想和我讨论的话,十分欢迎评论指教。希望本文能帮助您在架构设计的路上多一点思考。本篇文章主要讲架构的一些定义和架构师的职责,最后还有一些如何设计架构的原则和观点。在开始正文前我先抛出3个问题:什么是架构? 框架、架构、模块、组件的区别与联系是什么?架构师的定义是什么? 他到底是做什么的? 什么是称职的架构师?架构师如何设计出高性能、高扩展性、高可用性的架构?1. 架构1.1 什么是架构先看看wiki百科给的架构的定义:软.原创 2020-07-25 23:29:58 · 500 阅读 · 0 评论 -
[一文搞定股票买卖问题]: 刷通[买卖股票]
121. 买卖一次:买卖股票的最佳时机Difficulty: 简单给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格...原创 2020-02-28 16:24:27 · 1126 阅读 · 0 评论 -
动态优化: 最大子序号和
1. 53. 最大子序和Difficulty: 简单给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。可以化成’如何...原创 2020-02-28 14:09:56 · 472 阅读 · 0 评论 -
[一篇看懂] 最优化问题: 分治法 贪心算法 动态规划(举例说明)
欢迎指教 欢迎评论留言分治算法先划分, 大问题变小问题,等到问题规模小到可以直接解决了,再去处理这个足够小的子问题最后将子问题的最优解’合并’起来, 组合成原问题的最终解.三种解决方案都是将大规模的难解的问题改成小规模容易解的问题.比如分治算法经典的’最大子序和’问题.举例:53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素...原创 2020-01-30 14:50:12 · 1716 阅读 · 0 评论 -
[一篇看懂]啥是并查集、咋写并查集(附例题)
1. 并查集-** 并查集说到底就是个多叉树**1.1. 并查集应用找连通分量kruscal最小生成树的存储结构求最近公共祖先(Least Common Ancestors, LCA)1.2. 怎么写一个并查集并查集三大部分初始化找根合并: 其中一个根下放另一个并查集的根1.2.1. 初始化parent数组全置为-1parent中存储的如果是非负数: 存的...原创 2020-01-05 19:31:48 · 554 阅读 · 0 评论 -
[一篇看懂] string的各种操作
1. 找1.1. 找字符或串(最后一次)lastIndexOf(int ch)this.codePointAt(k) == ch以Unicode代码为单位lastIndexOf(int ch, int fromIndex)从指定的索引开始向后搜索lastIndexOf(String str)找子串lastIndexOf(String str, int from...原创 2020-01-05 16:42:11 · 482 阅读 · 0 评论 -
[一篇看懂] java到底是引用传参还是值传参
1. 总结java 中基础类型是值传参,对象类型是引用传参对象类型: new出来的都是, 包括数组2. 值传参举例public class Main { public static void main(String[] args) { int x = 3; Main.swap(x); System.out.println(x); } static v...原创 2020-01-05 15:01:25 · 439 阅读 · 0 评论 -
回溯法 动态优化(自顶向上 自底向上) 最终(贪心法优化)
1. 55.跳跃游戏1.1. 题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置1.1.1. 举例输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。1.2. 思路这是一个大问题可以化成...原创 2020-01-04 20:42:13 · 2450 阅读 · 0 评论 -
回溯法(递归实现) Leetcode括号生成 + 电话号码
1. 解题思路1.1. 回溯问题对串A逐个遍历, 且A中的每个元素都对应多个元素此时使用回溯法回溯法说到底就是两个方法,一个主一个辅主的搞异常处理和初始化辅的搞递归: 自己递归自己辅助函数自己分类递归,有多少个可能就调用递归多少次确定什么时候递归到头: 本题是rnum和lnum都到了n;电话号码是待转化的str遍历结束了1.2. 代码class Solution...原创 2020-01-04 14:24:20 · 489 阅读 · 0 评论 -
servlet使用
servlet使用注意xml中<url-pattern>/login</url-pattern>中的/login对应html中的<form action="login" method="post">login先进入入login.html, 然后填表,跳转servlet定义<servlet> <servlet-nam...原创 2019-05-15 10:21:17 · 427 阅读 · 0 评论 -
java 继承重写注意
继承要记住瞒住里式替换原则(LSP)LSP: 子类能够出现的地方, 父类一定可以替换出现, 并且不影响程序的运行, 外界无法判断是使用了父类还是子类但是! 子类出现的地方, 父类不一定可以替换如何遵守LSP子类可以有自己的特性子类可以相对于父类有自己的特殊性, 但不应该讲父类的方法修改得面目全非比如说:(具体代码参考https://blog.csdn.net/BeyondHaven...原创 2018-11-24 19:07:59 · 554 阅读 · 0 评论 -
安卓 文件创造
private类型只能本应用进行读写, 其他应用不可以访问采用覆盖写的方法举例 public void save(String filename,String content) throws IOException { FileOutputStream outputStream = context.openFileOutput(filename, context....原创 2018-11-22 21:17:24 · 490 阅读 · 0 评论 -
java 内部类
适用场景方便事件监听每个内部类都能独立的继承一个接口的实现, 变相的实现了java的多继承方案方便编写线程代码使用详解成员内部类内部类像是类的一个成员 , 可以有四种(public private protect 默认的 )访问权限 外部类只有public 和包访问两种权限内部类可以无条件访问外部类的属性和成员方法内部类访问外部类同名方法: 外部类.this.成员变量(方法)...原创 2018-11-21 22:29:30 · 411 阅读 · 0 评论 -
java final 关键字
final修饰类匿名内部类常用final修饰的类, 不可以继承final修饰的类中的方法会被默认为final修饰的方法final 修饰方法方法锁定, 防止任何继承类修改它的方法final修饰变量修饰基本数据类型数值初始化后不可以更改修饰引用型数据类型初始化后不可以指向其他的对象参考链接https://www.cnblogs.com/dolphin0520/p/3...原创 2018-11-21 10:12:48 · 398 阅读 · 0 评论 -
[java备忘录] 抽象类和接口
抽象类关键字 abstract修饰类public abstract class Employee{}修饰方法public abstract 类型 方法名();特性任何子类必须重写父类的抽象方法,或者声明自身为抽象类。抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。注意构造方法,类方法(用static修饰的方法)不能...原创 2018-11-08 21:35:55 · 431 阅读 · 0 评论