- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 Java将List对象导入Excel文件
通过poi依赖将java对象写入excel之中,核心理念是通过反射获取Java对象的getter方法和属性,使用getter方法获取要写入excel中的值,再通过属性上的自定义注解获取excel标题行,然后以文件流的方式写入excel
2022-12-09 09:56:11 3090 1
原创 SVN学习
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。...
2022-07-07 17:43:47 276 1
原创 算法技巧之用栈实现队列/用队列实现栈
算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
2022-02-21 21:54:56 546
原创 算法技巧之二分查找
二分查找(Binary Search)也叫作折半查找。二分查找有两个要求,一个是数列有序,另一个是数列使用顺序存储结构(比如数组)。
2022-02-20 14:47:53 449
原创 MyRPC版本6
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
2022-02-14 17:46:16 425
原创 MyRPC版本5
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
2022-02-11 17:01:18 890
原创 MyRPC版本4
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
2022-02-09 11:42:41 608
原创 MyRPC版本3
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
2022-02-09 11:36:37 636
原创 MyRPC版本2
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
2022-02-09 11:28:20 453
原创 MyRPC版本1
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用数据
2022-02-09 11:17:45 423
原创 MyRPC版本0
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据
2022-02-09 11:06:37 596
原创 Netty入门之BIO,NIO和AIO编程
Netty简介Netty 的介绍Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下,面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景。要透彻理解 Netty,需要先学习 NIO,这样我们才
2022-02-07 13:23:34 214
原创 Java之Socket编程
网络编程指的是编写跨多个设备(计算机)执行的程序,设备使用网络彼此连接。J2SE API的java.net包中包含一组类和接口,它们提供低级别的通信详细信息,开发者可编写专注于解决手头问题的程序。java.net包提供对两种常见网络协议的支持 -TCP - TCP代表传输控制协议,它允许两个应用程序之间的可靠通信。TCP通常用于Internet协议,称为TCP/IP。 UDP - UDP代表用户数据报协议,这是一种无连接协议,允许在应用程序之间传输数据包。本章为这两个协议准备了两个示例,以便
2022-01-25 15:20:27 357
原创 Redis之哨兵、持久化、主从、手撕LRU
大家都知道一个技术的引入方便了开发,解决了各种问题,但是也会带来对应的问题,技术是把双刃剑嘛,集群的引入也会带来很多问题,如:集群的高可用怎么保证,数据怎么同步等等,我们话不多说,有请下一位受害者为我们展示。面试开始三个大腹便便,穿着格子衬衣的中年男子,拿着三个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!而且还是三个,但是还好我看过敖丙写的《吊打面试官》系列,腹有诗书气自华,根本虚都不虚好伐。小伙子你好,之前问过了你基础知识以及一些缓存的常见几个大问题了,那
2022-01-18 17:34:46 193
转载 Redis之缓存雪崩、击穿、穿透
正文那提到Redis我相信各位在面试,或者实际开发过程中对缓存雪崩,穿透,击穿也不陌生吧,就算没遇到过但是你肯定听过,那三者到底有什么区别,我们又应该怎么去防止这样的情况发生呢,我们有请下一位受害者。面试开始一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。小伙子我看你的简历上写到了Redis,那么我们直接开门见山,直接怼常见的几个大问题,Redis雪崩了解么?帅气迷人的面试官
2022-01-18 10:51:22 169
转载 Redis之基础知识
Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚铩羽而归,疯狂收割大厂offer!面试开始一个大腹便
2022-01-18 10:06:08 161
转载 设计模式之责任链模式
面试经历大家肯定都有过,但是面试的流程其实跟一种设计模式很像,每一轮的面试官都有自己的职责,一个求职者面试经历的过程就好比一次客户端的请求过程。在设计模式系列的文章中之前已经为大家分享了创建型设计模式,感兴趣的小伙伴们可以再去翻看之前的分享。接下来开始分享设计模式三大类型中的行为型模式了,今天要分享的是责任链模式大纲定义什么是责任链?它的原理是什么?将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象
2022-01-18 09:36:03 174 1
转载 设计模式之原型模式
前言在设计模式的系列文章中,我们前面已经写了工厂模式、单例模式、建造者模式,在针对创建型模式中,今天想跟大家分享的是原型模式其实原型模式在我们的代码中是很常见的,但是又容易被我们所忽视的一种模式,那么什么是原型模式呢?原型模式其实就是一种克隆对象的方法,在我们的编码时候是很常见的,比如我们常用的的BeanUtils.copyProperties就是一种对象的浅copy,其实现在我们实例化对象操作并不是特别耗费性能,所以在针对一些特殊场景我们还是需要克隆那些已经实例化的对象的: 依赖外部资
2022-01-17 17:29:14 84
转载 设计模式之建造者模式
今天我们要讲的是设计模式中三种模式(创建型模式、行为型模式、结构型模式)中的创建型模式中的建造者模式,也可以叫Builder模式。与其他的创建型模式比如工厂模式一样都是用来服务相同的目标,但是他们的作用场景不一样,实现方式不一样而已,但最终的目的都是一个:就是为了让我们写出结构严谨,易懂且易扩展的高质量代码。建造者模式什么叫建造者?他的应用场景又是什么呢?当我们需要实列化一个复杂的类,以得到不同结构类型和不同的内部状态的对象时,我们可以用不同的类对它们的实列化操作逻辑分别进行封装,这些类.
2022-01-17 16:23:39 96
转载 设计模式之工厂模式
不知道随着大家工作年限的增长,有没有一种危机感,害怕自己的技术深度开始没有提升,所以经常会去看一点框架的源码,或者报一些网课去提升自己。最近我有一个老东家的同事跟我聊起来这个问题,说最近刚换公司了,但是自己的写的代码感觉很“low”,在codereview的时候总能被提出各种建议,几年经验了还在犯那种新手的错,写代码毫无模式和设计美感可言。而且在想学习技术深度的时候(看一写框架的源码)总感觉只理解了表面,而没有理解里面的思想。这里大家应该都知道我想说什么了,没错就是设计模式,其实这也是我刚工作.
2022-01-17 15:38:04 80
原创 MySQL之面试专题
35 个 Mysql 常见的小问题 1.说一说三大范式 2.MyISAM 与 InnoDB 的区别是什么? 3.为什么推荐使用自增 id 作为主键? 4.一条查询语句是怎么执行的? 5.使用 Innodb 的情况下,一条更新语句是怎么执行的? 6.Innodb 事务为什么要两阶段提交? 7.什么是索引? 8.索引失效的场景有哪些? 9.为什么采用 B+ 树,而不是 B-树 10.WAl 是什么?有什么好处?
2022-01-17 11:38:58 123
原创 设计模式之单例模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
2022-01-17 11:08:13 172
原创 MySQL之DDL变更
前言随着业务的发展,用户对系统需求变得越来越多,这就要求系统能够快速更新迭代以满足业务需求,通常系统版本发布时,都要先执行数据库的DDL变更,包括创建表、添加字段、添加索引、修改字段属性等。在数据量大不大的情况下,执行DDL都很快,对业务基本没啥影响,但是数据量大的情况,而且我们业务做了读写分离,接入了实时数仓,这时DDL变更就是一个的难题,需要综合各方业务全盘考虑。下面就聊聊这些年我公司在里面,MySQL中的DDL执行方式的变化、大表DDL该如何选择以及DDL执行过程监控。...
2022-01-12 16:52:39 1569
转载 深入浅出JVM之垃圾回收底层原理
Java 与 C++ 之间有一堵由内存动态分配和垃圾收集技术所围成的高墙 ---《深入理解Java虚拟机》我们知道手动管理内存意味着自由、精细化地掌控,但是却极度依赖于开发人员的水平和细心程度。如果使用完了忘记释放内存空间就会发生内存泄露,再如释放错了内存空间或者使用了悬垂指针则会发生无法预知的问题。这时候 Java 带着 GC 来了(GC,Garbage Collection 垃圾收集,早于 Java 提出),将内存的管理交给 GC 来做,减轻了程序员编程的负担,提升了开发效率。所以并.
2022-01-12 16:37:36 164
原创 深入浅出JVM之垃圾回收机制
前言Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用关心内存回收这些恼人的问题,这也是 Java 能大行其道的重要原因之一,GC 真正让程序员的生产力得到了释放,但是程序员很难感知到它的存在,这就好比,我们吃完饭后在桌上放下餐盘即走,服务员会替你收拾好这些餐盘,你不会关心服务员什么时候来收,怎么收。有人说既然 GC 已经自动我们完成了清理,不了解 GC 貌似也没啥问题。
2022-01-12 11:39:24 135
原创 深入浅出JVM之类加载过程
类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。类加载过程加载类加载过程的第一步,主要完成下面3件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据
2022-01-12 10:12:19 63
原创 深入浅出JVM之排查YGC问题
在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时,引发性能问题。我们团队负责的广告系统承接了比较大的C端流量,平峰期间的请求量基本达到了上千QPS,过去也遇到了很多次GC相关的线上问题。这篇文章,我分享一个更棘手的Young GC耗时过长的线上案例,同时会整理下YGC相关的知识点,希望让你有所收获。内容分成以下2个部分: 从一次YG
2022-01-12 09:59:08 966 2
转载 深入浅出JVM之排查堆内存溢出
带大家回温一下JVM的内存模型(这玩意跟JAVA内存模型JMM可不一样,不要记错了)今天我就直说堆,因为溢出是发送在堆中的。JVM堆内存被分为两部分:年轻代(Young Generation)和老年代(Old Generation)。年轻代年轻代是所有新对象产生的地方。当年轻代内存空间被用完时,就会触发垃圾回收。这个垃圾回收叫做Minor GC。年轻代被分为3个部分——Enden区和两个Survivor区。年轻代空间的要点: 大多数新建的对象都位于Eden区。
2022-01-12 09:34:49 445
原创 深入浅出JVM之大促期间JVM堆外内存泄漏故障排查记录
记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些「JVM内存分配的原理分析」以及「常用的JVM问题排查手段和工具分享」,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。「本文的主要内容:」 故障描述和排查过程 故障原因和解决方案分析 JVM堆内内存和堆外内存分配原理 常用的进程内存泄漏排查指令和工具介绍和使用 故
2022-01-11 17:28:15 224 1
原创 深入浅出JVM之线上服务的FGC问题排查
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力。同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验。过去半年时间里,我们的广告系统出现了多次和GC相关的线上问题,有Full GC过于频繁的,有Young GC耗时过长的,这些问题带来的影响是:GC过程中的程序卡顿,进一步导致服务超时从而影响到广告收入。这篇文章,我将以一个FGC频繁的线上案例作为引子,详细介绍下GC的排查过程,另外会结合GC的运行原理给出一份实践指南,希望对你有所
2022-01-11 16:42:13 358
原创 深入浅出JVM之Java堆内存
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,或者网上的文章大概都是这样介绍的:1、堆是线程共享的内存区域,栈是线程独享的内存区域。2、堆中主要存
2022-01-11 16:22:08 279
原创 MySQL之基础知识点
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
2022-01-07 17:19:28 199
原创 集合框架之Vector
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列等。最常见的同步容器就是Vector和Hashtable了,那么,同步容器的所有操作都是线程安全的吗?这个问题不知道你有没有想过,本文就来深入分析一下这个问题,一个很容易被忽略的问题。1同步容器在Java中,同步容器主要包括2类: 1、Vector、Stack、HashTable 2、Collections类中提供的静态工厂方法创建的类 本文拿相对简单的Veco
2022-01-07 16:54:22 102
原创 集合框架之ArrayList源码解析
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
2022-01-07 11:23:01 99
转载 集合框架之ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
2022-01-07 10:55:54 124
原创 集合框架之ConcurrentHashMap底层原理
多线程下 HashMap 有什么问题?在上一篇文章中,已经讲解了 HashMap 1.7 死循环的成因,也正因为如此,我们才说 HashMap 在多线程下是不安全的。但是,在JDK1.8 的 HashMap 改为采用尾插法,已经不存在死循环的问题了,为什么也会线程不安全呢?我们以 put 方法为例(1.8),假如现在有两个线程都执行到了上图中的划线处。当线程一判断为空之后,CPU 时间片到了,被挂起。线程二也执行到此处判断为空,继续执行下一句,创建了一个新节点,插入到此下标位置。然后,线程一
2022-01-07 10:11:13 116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人