- 博客(159)
- 收藏
- 关注
原创 操作系统上的网络IO基础
网络IO过程包含许多层面的内容,如计算机组成、网络通信、操作系统、应用程序API等。本次只讨论操作系统层面以上的网络IO基础。从操作系统层面看网络IOsocketsocket,主要包含五个要素, 通信协议、客户端ip、客户端port、服务端 ip、服务端port;可以理解为应用层到传输层的一层抽象,操作系统就为应用程序提供了许多socket相关的系统调用,以方便应用程序进行网络通信。可以通过netstat命令查看网络连接netstat -natp # 查看网络连接复制代码如果
2022-01-15 16:33:03 780
原创 Java实现创建Zip压缩包并写入文件
前言工作中需要把一些数据放到一个zip的压缩包中,可以使用 ZipOutputStream。ZipOutputStream可以将内容直接写入到zip包中。一般创建ZipOutputStream通常是先封装一个FileOutputStream,然后在每写入一个文件之前,需要先调用一次putNextEntry,然后使用write写入byte[]类型的数据,当写入完毕的时候使用colseEntry来结束这个文件的打包。当然也可以通过ZipOutputStream直接把数据写入压缩包内,在压缩包内构建数据。
2022-01-15 14:10:35 4017
原创 线程池源码撸完,面试还怕被问线程池?
前言大家好,我是努力更文的小白,我们知道不论是面试还是工作当中,都会接触到线程池,线程池更是面试官爱问的知识点,今天我带着大家来看一看线程池的源码,虽然看源码是一件十分枯燥无味的事情,但是你不卷,总有人卷,谁也不甘心被优化!!!跟着我,卷起来!!!继承体系线程池的继承体系如下图所示线程池状态线程池状态转换如下图所示 首先创建出线程池,并且没有调用shutdown方法之前,线程池就处于正常的运行状态,即RUNNING。处于RUNNING状态的线程池,你提交的任务(调用subm
2022-01-15 13:48:44 392
原创 Java CAS 原理详解
1. 背景在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。锁机制存在以下问题: 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 一个线程持有锁会导致其它所有需要此锁的线程挂起。 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 Volatile关键字能够在并发条件下,强制将修改后的值刷新到主内存中来保持内存的可见性。通过 CPU内存屏障禁止编译器指令性重排来保证并发..
2022-01-14 14:50:26 224
原创 两万字详解Java异常,面试再也不怕被问到
Java异常简介Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。Java异常架构1. ThrowableThrowable 是 Java 语言中所有错误与异常的超类。Throwable 包含两个
2022-01-14 14:17:39 149
原创 为何要配置环境变量?
一、前言干了这么多年Java,配置环境变量都是第一步要做的,但是为什么要配置环境变量呢,又有什么用呢,今天哪吒就带你一探究竟。二、百度百科有事没事找百度,百度解释名词这一块做的是真的好。1、环境变量简介环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序
2022-01-14 13:46:45 4148
原创 面试中经常被问到Java引用类型原理,带你深入剖析
1.选择唯一性索引唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。2.为经常需要排序、分组和联合操作的字段建立索引经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。3.为常作为查询条件的字段建立索引如果某个字段经常用来做查询条件,那
2022-01-13 17:19:29 315
原创 SpringBoot实现Excel导入导出,性能爆表,用起来够优雅,
操作Excel实现导入导出是个非常常见的需求,之前介绍了一款非常好用的工具EasyPoi。有读者提出在数据量大的情况下,EasyPoi占用内存大,性能不够好。今天给大家推荐一款性能更好的Excel导入导出工具EasyExcel,希望对大家有所帮助!SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/…EasyExcel简介EasyExcel是一款阿里开源的Excel导入导出工具,具有处理快速、占用内存小、使用方便的特点,在Git...
2022-01-13 14:09:32 4703 3
原创 关于Java的取时间方法的争论
Java有两个取时间的方法: System.currentTimeMillis()和 System.nanoTime(),它们的使用场景是有区别的,当前网上一些文章对于这两个方法的性能问题存在一些片面的描述,本文希望能给出一个简单的最终答案。System.currentTimeMillis() 存在性能问题?答案是否定的。这两个方法性能差异取决于操作系统。Windows:在 Windows 下, System.currentTimeMillis()比 System.nanoTime()...
2022-01-13 13:27:35 623
原创 Hard题学算法(二维前缀和+二维差分)
leetcode周赛遇到的hard题,题目在最后,当时做的时候毫无头绪,因为本人差分做的也很少,所有完全没往差分上面想,然后就开始坐牢。所以总结一下前缀和以及差分数组的知识点。一维前缀和一次区间和假设现在有个需求,给想知道指定一维数组某个区间的和,怎么求?例如数组[1,2,3,4,5,4,3,2,3],数组长度为n,我想知道下标2到5区间内数组元素的和,最直观的做法如下public int demo(int[] nums, int l, int r) { int sum = 0
2022-01-12 14:21:56 5817 1
原创 Java NIO Channel 使用
Java NIO 中的 Channel 分类:FileChannel SocketChannel ServerSocketChannel DatagramChannelFileChannel: 主要用于文件的读写,可以从磁盘上读取文件,也可以向磁盘上写入文件。SocketChannel:用于 Socket 的 TCP 连接的数据读写,既可以从 Channel 读数据,也可以向 Channle 中写入数据ServerSocketChannel:通过 ServerSocketChanne
2022-01-12 13:54:39 455
原创 详解虚拟机,京东内部出品HotSpot VM源码剖析笔记(附完整源码)
写在前面有这么一句话:学Java不怕找不到工作,Java的就业前景好,岗位也多,入门还快...但真的是这样吗?为什么明明岗位空缺单位却招不到合适的人?为什么很多学习Java的人却没有单位录用?答案就一个字:卷!公司对于Java开发的要求都变高了,很多东西你不仅要会用,还得知道其中的原理,不然免谈~举个栗子,就拿现在运用最广泛同样也是我们Java程序员吃饭的家伙——(HotSpot VM),它你们肯定不会陌生;现在的企业就喜欢深度考察虚拟机。要是你能深入理解HotSpot VM的运行原理,就可以写出更
2022-01-12 13:51:53 351
原创 记一次异步处理导致Jetty Request对象泄漏
最近排查一个bug,发现了一系列有意思的东西,对「自定义线程池」、「Jetty线程模型」都有了一些新的认识。本文预计阅读时间10分钟,包括:问题表现 常见原因筛查 根因与源码分析 最佳实践 一些小TIPS1.问题表现预发环境偶发请求失败异常,服务端显示错误信息为:Required String parameter 'seriesbaid' is not present复制代码对应controller的api为@PostMappingpublic Object get
2022-01-12 13:48:32 199
原创 Kafka介绍及设计原理详解
kafka基本概念kafka是一个分布式,分区的消息服务。名称 解释 broker 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群 topic Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic producer 消息生产者,向Broker发送消息的客户端 Consumer 消息消费者,从Broker读取消息的客户端 ConsumerGroup
2022-01-12 13:21:24 186
原创 Java中方法重写和方法重载的6个区别?
文章合集:gitee.com/mydb/interv…方法重写(Override)和方法重载(Overload)都是面向对象编程中,多态特性的不同体现,但二者本身并无关联,它们的区别犹如马德华之于刘德华的区别,除了名字长得像之外,其他的都不像。接下来咱们就来扒一下二者的具体区别。1.方法重写方法重写(Override)是一种语言特性,它是多态的具体表现,它允许子类重新定义父类中已有的方法,且子类中的方法名和参数类型及个数都必须与父类保持一致,这就是方法重写。1.1 基本用法...
2022-01-11 21:40:01 2223
原创 JDK序列化, 碰到serialVersionUID不一致问题,怎么处理?
公司有个子服务较多,交互频繁的系统,有一些需要共享传输的对象,它们通过 JDK 序列化(Java Object Serialization)后进行交互;但是由于一些不可描述的历史原因,这些对象存在多个版本,每个版本中的属性不一致,且未设置serialVersionUID。这阵子在做梳理/统一代码的工作,打算统一这些对象的版本和固定serialVersionUID,但是由于服务较多,上线发版时会有一段新老版本共存的时期,所以得考虑这些对象序列化的兼容问题,新的对象反序列化一定得兼容老的对象Java..
2022-01-11 20:12:55 242
原创 【性能优化】lock-free在召回引擎中的实现
在我们的工作中,多线程编程是一件太稀松平常的事。在多线程环境下操作一个变量或者一块缓存,如果不对其操作加以限制,轻则变量值或者缓存内容不符合预期,重则会产生异常,导致进程崩溃。为了解决这个问题,操作系统提供了锁、信号量以及条件变量等几种线程同步机制供我们使用。如果每次操作都使用上述机制,在某些条件下(系统调用在很多情况下不会陷入内核),系统调用会陷入内核从而导致上下文切换,这样就会对我们的程序性能造成影响。今天,借助此文,分享一下去年引擎优化的一个点,最终优化结果就是在多线程环境下访问某个变量,实...
2022-01-11 19:03:04 1169
原创 在K8S中,如何安全管理Secrets?
为何要加密?在Kubernetes中,Secret是用来帮我们存储敏感信息的,比如密码、证书等,但是在默认的情况下,Secret只是做了简单的base64编码,任何人都可以非常容易的对其进行解密获取到原始数据。比如通过以下方法生成一个secret对象:$echo-n"coolops"|kubectlcreatesecretgenericmysecret--dry-run--from-file=secret=/dev/stdin-oyaml>secret.ya...
2022-01-11 14:30:48 730
原创 java如何对接企业微信
前言最近实现社群对接企业微信,对接的过程遇到一些点,在此记录。企业微信介绍企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态。企业微信提供了丰富的api进行调用获取数据管理,也提供了各种回调事件,当数据发生变化时,可以及时知道。我们分为两部分进行讲解,第一部分调用企业微信api,第二部分,接收企业微信的回调。调用企业微信apiapi的开发文档地址:https://work.weixin.qq.com/api/doc/90000/90.
2022-01-11 13:17:23 2877
原创 Java中对象拷贝有哪些好用的工具类?
前言由于在项目中经常需要使用到Java的对象拷贝和属性复制,如DTO、VO和数据库Entity之间的转换,因此本文对需要用到的相关方法、工具类做一个汇总,包括浅拷贝和深拷贝,方便在需要用到时作为参考。浅拷贝(Shadow Copy)手动复制手动new对象,并设置相应字段的值,在字段较少时比较方便。另外就是由于是手动赋值,安全性较高,不容易出错,并且性能最好。比如有如下一个类:public class User { private String name;
2022-01-10 15:02:05 6171
原创 一文回顾攻击Java RMI方式
前序RMI存在着三个主体RMI Registry RMI Client RMI Server而对于这三个主体其实都可以攻击,当然了需要根据jdk版本以及环境寻找对应的利用方式。Ps.在最初接触的RMI洞是拿着工具一把梭,因此在以前看来笔者以为RMI是一个服务,暴露出端口后就可以随意攻击,现在看来是我才疏学浅了,对于RMI的理解过于片面了。本文是笔者在学习RMI的各种攻击方式后的小结,若有错误,请指出。Ps1.本文并无任何新知识点,仅仅是对于各位师傅文章的一个小总结。RMI为何关
2022-01-10 14:37:35 781
原创 spring cloud alibaba nacos
什么是NacosNacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。简单来说,Nacos给我们提供了服务的注册与发现、配置中心、服务总线等,Nacos一个组件相当于Eureka、Config、Bus三个组件Nacos安装版本选择进入
2022-01-10 13:43:08 348
原创 查询 MySQL 字段注释的 5 种方法
很多场景下,我们需要查看 MySQL 中表注释,或者是某张表下所有字段的注释,所以本文就来盘点和对比一下查询注释的几种方式。创建测试数据库开始之前咱们先创建一个数据库,以备下面演示使用。-- 如果存在就先删除数据库drop database if exists test2022;-- 创建数据库create database test2022;-- 切换数据库use test2022;-- 创建表和字段(以及相应的注释)CREATE TABLE `student` ( `id
2022-01-10 13:26:26 3414
原创 Java CAS 原理详解
1. 背景在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。锁机制存在以下问题: 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 一个线程持有锁会导致其它所有需要此锁的线程挂起。 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 Volatile关键字能够在并发条件下,强制将修改后的值刷新到主内存中来保持内存的可见性。通过 CPU内存屏障禁止编译器指令性重排来保证并发..
2022-01-10 13:14:43 421
原创 类加载机制
前言你好,我是坤哥从今天起我打算整一个 Java 系列的进阶基础文章, 相信对大家会有帮助帮助,万丈高楼平地起,打好基础我们才能走得更好,举个例子,之前我在武哥的 Kafka 文章中看到这样的一句话「除此之外,页缓存(pageCache)还有一个巨大的优势。用过 Java 的人都知道:如果不用页缓存,而是用 JVM 进程中的缓存,对象的内存开销非常大(通常是真实数据大小的几倍甚至更多)」,如果你不了解 Java 对象的表示,看到这样的话会一脸懵逼:对象的开销到底有多巨大,反过来看,如果你掌握了 Ja
2022-01-08 15:47:26 88
原创 阿里内网最新实战手册,7大核心组件详解SpringCloud+Jenkins+K8S
SpringCloud自打17年问世以来 ,热度是一天比一天高,虽然Spring Cloud的出现,为广大开发者带来了福音。但是我发现,Spring Cloud的好处虽然多,但国内的系统教程可谓凤毛麟角,实战类课程更是难求。在这样的前提下,我联合我的小伙伴们,耗时七七四十九天打造了这份Spring Cloud+Jenkins+K8S实战手册!不管你现在你在开发过程中有没有用到springcloud,我都推荐你一定来看看这份Spring Cloud+Jenkins+K8S从入门到实战手册。因为时刻掌握最
2022-01-08 15:35:01 679
原创 实战,Spring Cloud Gateway集成 RBAC 权限模型实现动态权限控制
这篇文章介绍下网关层如何集成RBAC权限模型进行认证鉴权,文章目录如下:什么是RBAC权限模型?RBAC(Role-Based Access Control)基于角色访问控制,目前使用最为广泛的权限模型。相信大家对这种权限模型已经比较了解了。此模型有三个用户、角色和权限,在传统的权限模型用户直接关联加了角色层,解耦了用户和权限,使得权限系统有了更清晰的职责划分和更高的灵活度。以上五张表的SQL就不再详细贴出来了,都会放在案例源码的doc目录下,如下图:设计思路RBAC权限
2022-01-08 15:31:02 145
原创 Java线程池实现原理和源码分析
依稀记得2019年10月份的时候某东从创业公司离职打算面试找工作,他问我线程池你会么?然后给我他发了一篇我2017年写的笔记《Java并发编程之线程池必用知识点》,他说就这么点?我当时想线程池也差不多就这么多吧~!2019年11月9号我和某东一起从大望路做815公交去燕郊。当时只是因为我正在学习一部分多线程相关的知识点,刚好公交车上没啥事情我俩就唠了唠。当时他问了我一些线程池的问题,我觉得在平时的工作线程池知道该怎么用就行顶多优化一下核心线程数量。主要讨论的还是多线程并发和锁的相关问题。年底工作一般
2022-01-08 15:14:01 372
原创 重学Java系列-1. GC原理 & 垃圾回收算法
GC原理 GC即垃圾收集,追踪仍然使用的所有对象,并将其余对象标记为垃圾然后进行回收; GC判断策略(例如引用计数法,可达性分析法) GC收集算法(标记清除法,标记清除整理法,标记复制清除法,分带法) GC收集器(例如Serial,Parallel,CMS,G1); 判断策略(哪些内存需要回收) 引用计数法:每个对象都有一个引用计数器,当对象被引用一次的时候,计数器+1,当对象引用失效的时候,计数值-1,实时性, 但不能解决循环引用的问题; 可达性分析法
2022-01-08 14:48:37 70
原创 详解Java8接口中引入Default关键字的本质原因
接口的常规实现方式熟悉java接口的同学都知道,接口被某些类实现后,一旦在接口中增加了新方法,那么实现该接口的所有类都要实现这个新增的方法(即使这个新增的接口对某些类没有用处)。定义一个接口publicinterfaceIDemo{voidfunc1();}类CDemo1实现接口IDemopublicclassCDemo1implementsIDemo{@Overridepublicvoidfunc1(){...
2022-01-07 15:20:51 436
原创 实战既王道,Alibaba内网开源700页Java程序性能优化实战手册
目前,市面上为数不多的讲解Java程序性能优化的图书内容不够深入,讲解也不够浅显易懂,有的甚至晦涩难懂。为了帮助大家解决这一难题,团长这边找到我的好师傅,软磨硬泡下拿到了这份阿里内部独家发布的“JavaJava程序性能优化实战手册”这份手册通过大量示例从软件设计、编码和JVM等维度阐述性能优化的方法、技巧和思想,深度剖析JDK的实现!手册目录总览下面会给大家展示一下本书的部分内容,优化的一般步骤代理类的工作流程
2022-01-07 15:04:11 465
原创 在Java中为什么不同的返回类型不算方法重载?
方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。 比如以下 4 个 method 方法就可以称之为方法重载,如下代码所示:public class OverloadExample { public void method() { // doSomething } public void method(String name) { // doSomething } public
2022-01-07 14:39:13 163
原创 CTO离职前悄悄送我5本Java核心笔记,和我说吃透跳槽涨薪指日可待
我的顶头上司,公司的CTO离职了,多多少少有点小伤感,毕竟这么久了,从来公司以来都是他一手带起了多少,有点感情的还是,临了约了一起,吃了个饭,有一说一,临走他还多多少少恶心我了下,他的薪资居然是我的7倍之多!但他也做了件好事就是分享给我一套阿里大佬的5本java 核心技术笔记,质量特别的高,特别是《Java 高并发》、《MySQL》、《Spring》这几本,强烈推荐大家阅读。带大家看下目录,干货满满。《Java 高并发》内容节选《MySQL
2022-01-07 14:29:44 339
原创 JDK8 ArrayList源码分析
1. ArrayList类注释翻译Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size o
2022-01-07 14:18:27 674
原创 Java参数传递到底是按 值传递 还是 引用传递 ?
前言首先明确,Java中方法参数传递方式是按值传递。对于基本类型(int a, long b),参数传递时传递的是值,例如int a = 5,传递的就是5。如果是引用类型,传递是指向具体对象内存地址的地址值,例如用System.out.println(new Object())打印出来的 java.lang.Object@7716f4 中 @符号后面的7716f4 就是16进制的内存地址,System.out.println实际上是默认调用了对象的toString方法,public String
2022-01-07 13:57:04 145
原创 爱了,阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战
爱了爱了,Alibaba出品“Springboot+微服务架构指南”,理论与实战结合,双管齐下!有幸从一位朋友那里得到Alibaba内部出品强推的“SpringBoot+微服务学习指南”,秉承好东西的当然要共享的原则,今天就来秀一把,试试这“Springboot+微服务学习指南”是否也能让你事半功倍!Spring Boot 构建小系统到架构分布式大系统(理论+实战)Spring Boot是目前Spring技术体系中炙手可热的框架之- -,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞
2022-01-07 13:51:29 380
原创 Java高效开发-SSH+Wireshark+tcpdump组合拳时间
目标实现抓取远程服务器的数据包在wireshark中展示,不需要频繁使用tcpdump抓包后保存为cap数据包,在进行从服务器下载进行解析;工具1.sshwin10默认没有开启ssh服务端的,打开方式:搜索-->可选功能-->添加功能-->openSSH服务器-->安装即可2.wireshark抓包工具官网下载:Wireshark · Download本人提供的阿里云盘下载链接:https://www.aliyundrive.com/s/XDHMTb8..
2022-01-06 17:19:22 95
原创 微服务怎么学?天花板级微服务p9总结出这份451页笔记告诉你微服务就该这么学
知乎热议!有没有一本讲微服务架构比较不错的书?貌似关于架构设计的书没有人推荐?有没有人推荐一本,最好是有关架构演变的也有相关介绍小编就在这里推荐一份Chris Richardson写的《微服务架构设计模式》,他本人是微服务领域的专家,和微服务的提出者Martin Fowler一样出名。另外不要买中国人写的那些作者都是骗钱的,他们自己对微服务理解就不深。那些书大部分把微服务和spring cloud 划等号,对领域驱动设计,事件溯源,CQRS,SAGAS分布式事务只字不提。全文涵
2022-01-06 16:14:56 95
原创 推荐学java——MyBatis高级
补两张知识导图最近的两篇文章《Maven初识》和《第一个MyBatis程序》 文中缺少了知识结构图,这里补充一下。初识MavenMyBatis知识导图本节内容是关于 MyBatis的高级部分,上节的内容重点是带大家从零开始搭建一个使用 MyBatis框架的java项目,并且能使用 MyBatis框架完成对数据库中表的增删改查操作;这听起来不难理解,但对于新手要实战一遍,还是需要多加练习,推荐大家通过新建 Module的方式来操作。本节内容会在上一节的基础上进行,包括项目工...
2022-01-06 15:02:59 214
原创 来了来了,阿里巴巴中间件p8手撸RocketMQ技术内部手册惨遭开源
随着大数据、云计算、社交网络、物联网等技术不断融入我们的生活,我们需要具有高性能、高可用、分布式、支持容错、支持事务的中间件来支持互联网的高速发展,经历过无数淘宝“双11”的中间件产品RocketMQ应运而生,而今天小编分享的这份“RocketMQ技术内幕”手册,将揭开RocketMQ高性能底层支持的神秘面纱。手册将从整体架构、底层存储设计、源码分析等综合方面来剖析RocketMQ,读完本手册会让读者对架构设计及枯燥的源码分析有新的认识和体会。内容展示准备篇实现篇
2022-01-06 14:54:14 3463
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人