Java
文章平均质量分 86
java高阶程序设计
korgs
原某互联网大厂P8架构师,多年耕耘电商、医疗、网络安全领域,现主要从事CNN深度学习图像处理开发。腾讯、钉钉、支付宝、阿里云兼职讲师,曾参与ACP、开悟AI、斑马智行车机等多套认证课程制作。阿里云社区/51CTO/腾讯云等多个开发者社区专家博主。全栈工程师,精通java、python、objective-C、swift、c++、react语言。
展开
-
java基础(1) - 数据结构
目录一、栈(stack)二、队列(queue)三、链表(Link)四、散列表(Hash) 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈)两种, 前者相当于插入,后者相当于删除最后的元素。 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进原创 2023-03-28 11:24:52 · 292 阅读 · 1 评论 -
java基础(2) - 内部类
定义在方法中的类,就是局部类。如果一个类只在某个方法中使用,则可以考虑使用局部类。原创 2023-03-28 11:42:22 · 138 阅读 · 1 评论 -
java基础(3)-泛型
泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Java 泛型。原创 2023-03-28 12:12:06 · 159 阅读 · 1 评论 -
java基础(4)-注解
Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。注解发生在编译阶段,它是把parse和enter阶段生成的AST语法树,经过AbstractProcessor类处理生成修改过的语法树,再交给下游进行处理。Lombook就是用这种方式实现的,注解暂时不支持继承。原创 2023-03-28 12:17:47 · 214 阅读 · 2 评论 -
java基础(5) - 序列化
Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对象才可能存在,即这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中,就可能要求在 JVM 停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象,Java 对象序列化就能够帮助我们实现该功能。原创 2023-03-29 08:53:08 · 281 阅读 · 1 评论 -
java基础 (6)- 枚举
枚举类型自动继承java.lang.Enum。它的ordinal()方法返回一个Int值,指向enum实例在声明时的次序,从0开始。可以使用==来比较enum实例,编译器会自动为你提供equals()和hashCode()方法。Enum类实现了Comparable接口,所以具有compareTo()方法,同时它还实现了Serializable接口。原创 2023-03-29 08:54:43 · 162 阅读 · 0 评论 -
java基础 (7)- 基础常用知识点
这章比较零散,主要是汇总一些编程时常用的一些少见但又比较重要的知识点。原创 2023-03-29 08:53:34 · 51 阅读 · 0 评论 -
Java-Stream流式编程详解
将集合或数组 转换成一种流的元素序列。流不是集合中的元素,也不是一种数据结构,不负责数据的存储。Stream 流也不会改变源对象(源集合)Stream 接口中几乎所有方法的参数都是四大函数式接口接口类型的参数。而函数式接口可以使用 lambda 表达式来简化开发,并且 Stream 接口中的方法基本都是返回对象本身(返回对象本身的方法可以使用链式编程)。所以在使用 Stream 流式计算时,基本上都用到了函数式接口、lambda表达式 和 链式编程。原创 2023-03-30 11:58:17 · 1186 阅读 · 0 评论 -
java开发常用注解详解
java开发常用注解详解,只需这些就够了原创 2023-03-30 11:58:45 · 1287 阅读 · 0 评论 -
Lambda表达式详解
Lambda表达式详解,只读这一篇就够了原创 2023-03-30 11:59:48 · 127 阅读 · 0 评论 -
基于Springboot的Rpc服务端开发脚手架(base-grpc-framework)
base-grpc-framework是笔者自行开发和封装的一个server脚手架,可直接用于单机和分布式服务端开发。主要集成了Springboot、Google-grpc、Mapstrut、Mybatis、hutool(开源工具包)等开源框架,并基于上述基础封装了最最基本的服务能力,并对每种能力都提供了抽象实现和配置。使用者可通过修改相关配置就可直接开发业务代码原创 2023-04-01 11:53:35 · 439 阅读 · 0 评论 -
基于Springboot的服务端开发脚手架-自动生成工具
此为一工具,默认生成java服务工程,但可经过配置生成其它类型的工程或目录结构,如python、recat等。此工具中自带了之前课程中提到的dao操作、http拦截、tracklog日志跟踪、exception切面处理等所有功能。可节省大量的搭建工程和基础工作的开发时间。而且生成的项目文件源文件,可进行二次修改。原创 2023-04-01 11:59:11 · 448 阅读 · 0 评论 -
Thread专题(1/14) - 线程安全
多线程专题系列1/14,线程安全就是对共享的、可变的状态进行管理,对象的状态就是它的数据,换句话说就是在不可控制的并发访问中保护数据。一个对象是否应该是线程安全的取决于它是否会被多个线程访问。这个特性表明,不是对象完成了什么而是程序如何使用对象。原创 2023-04-02 20:36:23 · 114 阅读 · 0 评论 -
Thread专题(2/14) - 共享对象
一般来讲,结合本章的共享&发布对象技术和上一章的线程安全技术一起可以创建线程安全类以及使用java.util.concurrent类库构造安全的并发应用程序的基础。共享其实就是某一线程的数据改变对其它线程可见,否则就会出现脏数据。在使用Synchronized时除了了解它是执行原子化操作的,同样还要理解如何内存可见性。保证内存可见性就要保证数据的read和write由同一个锁进行保护。下面是一个不可预见的输出程序,一般不要这么来做。这里的number和ready对于线程来说可能永远不可见,也可能正确输出原创 2023-04-03 11:54:56 · 121 阅读 · 0 评论 -
Thread专题(3/14) - 组合对象
虽然前面介绍了一些线程安全与同步的基础知识,但我们不希望为了获得线程安全而去分析每次内存访问,而希望组合成更大的组件或程序安全的组件对外提供安全性。原创 2023-04-03 11:53:41 · 67 阅读 · 0 评论 -
Thread专题(4/14) - 构建块
在实践中,委托是创建线程安全类最有效的策略之一:用已有的线程安全类来管理所有状态即可。,同步容器包括Vector和Hashtable、以及Collections.synchronziedXXX工厂方法创建的容器类,这些类通过封装它们的状态,并对每一个公共方法进行同步而实现了线程安全。这种封装对于单线程程序是线程安全的,对于复合操作,只能采用客户端锁的方式来解决了。原创 2023-04-03 11:58:02 · 212 阅读 · 0 评论 -
Thread专题(5/14) - 任务执行
所谓任务就是抽象、离散的工作单元。把一个应用程序的工作分离到任务中,可以简化程序的管理,这种分离还在不同事务间划分了自然的分界线,在程序出现错误时可以很方便地进行恢复,还有利于提高程序的并发性。原创 2023-04-05 00:37:16 · 146 阅读 · 0 评论 -
Thread专题(6/14) - 取消和关闭
java中没有提供任何机制,来安全是强迫线程停止手头的工作,Thread.stop和Thread.suspend方法存在严重的缺陷,不能使用。但每个Thread提供了Interruption中断,一种协作机制来协调线程间的操作和控制。这是JAVA中推荐的方式。程序不应该立即停止,应该采用中断这种协作机制来处理,正确的做法是:先清除当前进程中的工作,再终止。原创 2023-04-05 00:36:25 · 285 阅读 · 0 评论 -
Thread专题(7/14) - 应用线程池
本节主要关注在配置和调整线程池时用的高级选项,讲述了任务执行框架的过程中需要注意的危险。线程复用原理如下:每一个 Thread 的类都有一个 start 方法。当调用 start 启动线程时 Java 虚拟机会调用该类的 run方法。那么该类的 run() 方法中就是调用了 Runnable 对象的 run() 方法。我们可以继承重写Thread 类,在其 start 方法中添加不断循环调用传递过来的 Runnable 对象。这就是线程池的实现原理。原创 2023-04-05 19:06:44 · 160 阅读 · 0 评论 -
Thread专题(8/14) - GUI应用程序
GUI程序任务必须运行在Swing的事件线程中,几乎所有的GUI工具都实现为单线程化子系统,意味着所有的GUI的活动都被限制在一个单独的线程中。原创 2023-04-05 19:05:22 · 113 阅读 · 0 评论 -
Thread专题(9/14) - 避免活跃度危险
安全性和活跃度通常互相牵制,我们一般用锁来保证线程安全、线程池和信号量来约束资源的使用,但使用不当就容易造成“死锁”和“资源死锁”。java不能从死锁中进行恢复。恢复应用程序健康的唯一方式就是中止或重启,然后寄希望于不要发生这样的事情。原创 2023-04-06 16:32:44 · 102 阅读 · 0 评论 -
Thread专题(10/14) - 性能和可伸缩性
设计并发程序时,性能并不是最优先的考虑,安全总是放在第一位的。首先要保证程序的正确性,而后只有当你的性能需求和评估标准需要程序运行得更快时,才去进行改进。原创 2023-04-06 16:34:01 · 166 阅读 · 0 评论 -
Thread专题(11/14) - 测试并发程序
很多顺序程序的测试方法在并发程序中也适用,但需要更广泛的覆盖度和更长的运行时间。并发类的测试主要分为:安全性与活跃度的测试。活跃度测试包括:吞吐量:在一个并发任务集中,已完成任务所占的比例。响应性:从请求到完成一些动作之间的等待时间。可伸缩性:增加更多的硬件或软件资源后,吞吐量是否会提高。原创 2023-04-06 16:35:09 · 235 阅读 · 0 评论 -
Thread专题(12/14) - 显式锁
在java5.0之前,对象共享访问的机制只有synchronized和volatile。内部锁不能中断那些正在等待获取锁的线程,并且在请求锁失败的情况下,必须无限等待。在5.0之后提供了ReentrantLock,ReentrantLock并不是为了替代内部锁,提供可选择的高级特性,比如活跃度和性能。原创 2023-04-07 08:04:59 · 113 阅读 · 0 评论 -
Thread专题(13/14) - java存储模型
java语言规范规定了JVM要维护内部线程类似顺序化语意,只要程序的最终结果等同于它在严格的顺序环境中执行的结果。对性能提升除了越来越高的时钟频率,还有不断提升的并行性--管道超标量体系结构执行单元,动态指令调度,试探性执行以及成熟的多级存储缓存。处理器也在向多核转变,原因在于时钟频率正在变得难以经济地获得提高,可以提升的只有硬件的并行性。在多线程的环境中,为维护正确性不得不产生很大的性以开销,这是通过使用同步完成的。原创 2023-04-07 08:06:46 · 64 阅读 · 0 评论 -
Thread专题(14/14) - 自定义Annocation
这一章的注解是非官方的注解,属于一点扩展知识。自从java有了注解能力后,在有些时候可以考虑用注释来代替文档。原创 2023-04-08 12:34:06 · 64 阅读 · 0 评论 -
jvm专题(1) - 【1/9】体系结构
jvm是老生常谈的一个话题了,虽然大家一直在用在研究,但遇到一些线上问题时有时还是无从下手,笔者刚开始接触时可以说是一看就会,一用就废原创 2023-04-10 09:07:16 · 219 阅读 · 1 评论 -
jvm专题(2) - 【2/9】内存结构
本章笔者会重新组织下语言,着重讲下JVM的内存结构。此章会贯穿JDK1.6到JDK1.8的内容,最后会阐述下类初始化的过程,从原理上了解JVM的内存分配机制,本章内容比较基础但非常重要,它是优化代码和JVM调优的基本一定要牢记。后续会专题讲解JVM调优的实操,本章相当于授渔,后续章节相当于授鱼吧。原创 2023-04-10 09:08:43 · 130 阅读 · 1 评论 -
jvm专题(3) - 【3/9】GC基础
此章笔者会多写点,分三个子专题来讲述:理论基础、实操、工具使用。目的是争取使读者一次性弄懂。不需要再反反复复的查各种资料,笔者也会把之前踩过的坑也详细描述下,防止读者再走笔者的弯路。牢记:可被GC管理的内存区只有堆和方法区,其它3个私有区都会随着线程终止而释放。原创 2023-04-10 09:07:26 · 86 阅读 · 1 评论 -
jvm专题(3) - 【4/9】GC实操
在实操作本章内容之前,请一定详细了解1/3章GC基础的内容,同时因为每个应用的情况不太一样,所以JVM调优没有一个统一的模式,只有深入了解其原理后才能进行调优操作。笔者大概罗列了一下JVM调优的必要过程:1、了解jvm原理;2、了解jvm相关参数;3、可读懂gc日志;4、上线压测。原创 2023-04-10 09:09:01 · 230 阅读 · 1 评论 -
jvm专题(3) - 【5/9】工具
非常不容易呀,本章完结后,jvm的主要专题基本算完整了,就先暂时告一段落了,感谢大家的支持。由于笔者水平有限,也欢迎大家指正哈。原创 2023-04-10 09:10:04 · 175 阅读 · 1 评论 -
jvm专题(4) - 【6/9】多线程-基础知识
JVM基础中的最后一块拼图,也是很多同学一直比较迷糊的板块,按传统本文还是围绕基础展开做为一个入门级的指引,梳理下思路,感兴趣的小伙伴可以深入了解其中某个的知识点。原创 2023-04-11 08:53:59 · 78 阅读 · 1 评论 -
jvm专题(4) - 【7/9】多线程-实现
本章内容比较简单,主要是对Thread的实现方式做下初步介绍,稍带着描述下相关方法的原理和使用场景。此节的内容也是开发同学能不能写出高质量线程程序的一个基础,同样也非常重要。原创 2023-04-11 08:58:17 · 100 阅读 · 1 评论 -
jvm专题(4) - 【8/9】多线程-锁
在高并发情况下影响多线程程序的性能最大的一个因素可能就是锁了,包含锁的范围、锁的类型等等,所以说锁的掌握可以说尤为重要。不同的文章对锁的分类都不一样,本章中笔者由浅入深,先从概念开始后API实现这样的一个顺序来描述。原创 2023-04-11 08:59:48 · 201 阅读 · 1 评论 -
jvm专题(9/9) - 小结
jvm专题- 小结,jvm体系结构原创 2023-04-11 08:58:24 · 50 阅读 · 1 评论