
java
文章平均质量分 81
陈_yu
大学生一枚
展开
-
Spring Boot Admin,贼好使
原文作者:Java中文社群 链接:https://juejin.cn/post/7052857798530433031 Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序。应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 SBA 中,然后就可以实现对 Spring Boot 项目的可视化管理和查看了。 Spring Boot Admin 可以监控 Spring Boot 单机或集群项目,它提供详细的.原创 2022-01-23 14:02:25 · 176 阅读 · 0 评论 -
HashMap除了死循环之外,还有什么问题?
其实两年前校招的时候就往阿里投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里这两年除了工作以外,也会坚持写博客,也因此结识了很多优秀的小伙伴,从他们身上学到了特别多东西,把这次面试分享出来,也是希望可以帮助到更多的人。 一面(远程视频面) 自我介绍 项目介绍 Redis 介绍 了解 redis 源码吗 了解 redis 集群吗 Hashmap 的原理 hashmap 容量为什么是 2 的幂次 hashset 的源码 object 类你知道的方法 h原创 2022-01-22 21:15:15 · 145 阅读 · 0 评论 -
工作四年,分享50个让你代码更好的小建议
前言 工作了四年,看过很多思考不够深入的代码,因此写一下总结吧,50个让你代码更好的建议。其中的一些点,我以前的文章也写过啦,这次主要汇总一下。希望大家日常写代码多点思考,多点总结,加油!同时哪里有不对的,也望指出,感谢哈~ 1. 仅是判断是否存在时,select count 比 select 具体的列,更好。 我们经常遇到类似的业务场景,如,判断某个用户userId是否是会员。 (反例): 一些小伙伴会这样实现,先查从用户信息表查出用户记录,然后再去判断是否是会员: <select id原创 2022-01-19 21:01:59 · 241 阅读 · 0 评论 -
Spring 5系统架构
Spring大约有20个模块,由1300多个不同的文件构成。这些模块可以分为核心容器、AOP和设备支持、数据访问与集成、Web组件、通信报文和集成测试、集成兼容等类。Spring 5的模块结构如下图所示。 组成Spring框架的每个模块都可以单独存在,也可以将一个或多个模块联合实现。下面分别介绍每类模块的组成和功能。 1 核心容器 核心容器由spring-beans、spring-core、spring-context和spring-expression(Spring Expression Lan原创 2022-01-19 20:38:58 · 173 阅读 · 0 评论 -
面试官:说说常用的排序算法呗
十大排序算法思路汇总 在面试的过程中经常会遇到手写排序算法,所以本文就简单总结一下。不对算法的细节做介绍,只做一个概括性的描述。 交换类:通过元素之间的两两交换来实现排序 插入类:将数分为2部分,依次将无序的数插入到有序的数列中 选择类:从待排序数列中找到最小值或者最大值元素,放到已拍好序的序列后面 计数排序和基数排序可以认为是桶排序的一种特殊实现,都不是通过元素之间的比较来实现排序的 冒泡排序 冒泡排序,从头开始,依次比较数组中相邻的2个元素,如果后面的数比前面的数大,则交换2个数...原创 2022-01-11 14:53:58 · 94 阅读 · 0 评论 -
计算机网络知识复习(day01)--计算机网络相关概念及网络分层架构模型
参考书籍:《图解TCP/IP》、《计算机网络-谢希仁》 1、计算机网络相关概念 1、计算机网络: 计算机网络是将分散在不同地点且具有独立功能的多个计算机系统,利用通信设备和通信线路相互连接起来,在网络协议和软件的支持下进行数据通信,实现信息传递和资源共享的计算机共享的集合。总之,计算机网络是互连的、自治【无主从关系】的计算机集合。 2、计算机网络的组成: 从组成部分上看,一个完整的计算机网络主要由硬件、软件、协议三大部分组成,缺一不可。 硬件:由若干结点和连接这些结点的链路组成;结点.原创 2022-01-11 14:48:35 · 1011 阅读 · 0 评论 -
Redis布隆过滤器
简介 布隆过滤器是一种概率型数据结构(Probabilistic data structures),对插入和查询比较高效,能够计算 “某样东西 一定不存在 或者 可能存在 ”。 如果存在那就是可能存在(hash的碰撞) 如果不存在那就一定不存在 相比于传统的 List、Set、Map 等数据结构,它更高效插入和查询、占用空间更少,但是缺点是其返回的结果可能是误判存在的,合理设置长度以及hash 函数的个数可以提高准确率。 布隆过滤器原理 向布隆过滤器添加元素 key 时, 会使用多个 has.原创 2022-01-11 14:47:21 · 168 阅读 · 0 评论 -
异步任务的管理器 | 教你如何优雅打印日志
一、前言 看完这篇文教你怎样biu的佛的打印日志 二、线程池配置 执行异步人任务时,需要将执行的任务放入到线程池中,所以需配置好我们的线程池,比如 核心线程大小 、 最大可创建的线程数 和 队列长度 等。 2.1 基本参数配置 @Configuration public class ThreadPoolConfig { /** * 核心线程池大小 */ private int corePoolSize = 50; /** * 最大.原创 2022-01-11 14:44:02 · 770 阅读 · 0 评论 -
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-06 15:06:02 · 1746 阅读 · 0 评论 -
日期格式化你遇到过这样的坑吗
2022年的第6天,业务群里炸开了锅,昨天导入正式库的数据,昨天导入完查询正常,今天确查不到了,这是怎么回事呢,产品,测试,开发都在群里咋呼起来,经过排查,原来是代码逻辑的问题,业务关联了年度,只能查询当年的业务,虽然是个小插曲,却让我想起了一个很容易被人遗忘的问题,就是时间格式化,YYYY-MM-dd与yyyy-MM-dd的区别。 这两个有什么区别呢,先让我们用代码运行一下看看吧 public class Test{ public static void main(String[] ar..原创 2022-01-06 14:59:21 · 106 阅读 · 0 评论 -
业务代码与技术代码
当程序员大多都有一个共同的经历:当你在改一段复杂的代码时,你一边吐槽是哪个小可爱写的这段像一坨*一样的代码时,一边打开了提交记录,赫然发现竟然是自己3个月前写的! 明明看起来很简单的业务,但写出来的软件代码为什么会这么复杂呢?这是所有程序员都可能会思考的问题。 “领域驱动设计”号称是一种能够应对软件复杂性的解决方案,它的核心思路是从业务视角出发,去设计软件,并试图把技术复杂性和业务复杂性分离开来。但领域驱动设计是20年前就提出来的,那时候的软件面临的技术挑战和技术复杂性和现在不可同日而语,有些规则可原创 2022-01-04 21:33:36 · 273 阅读 · 0 评论 -
JAVA类加载机制之Classloader以及打破加载机制的方式
在jDK1.8中,Classloader加载class的字节码到JVM,它是遵循双亲委派模型的加载机制,主要是由BootstrapClassLoader,ExtClassLoader、AppClassloader,然后是自定义的Classloader加载,这样做主要是保证JDK的内部类加载安全性,所以优先加载JDK的ClassPath的jar包的类.双亲委派模型的如下图所示,其实就是由两级父Classloader加载,分别是BootstrapClassloader和ExtClassloader。 JDK的原创 2022-01-04 21:30:03 · 1033 阅读 · 0 评论 -
springboot实现对注解的切面
对注解实现切面案例 菜鸟记录一下学习过程。 (1)首先定义一个注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String getValues() default "test annotation"; } @Target(ElementType.METHOD) 表示该注解作用在方法上(type表示类上,field表示成员变量上) @原创 2022-01-04 21:27:38 · 1608 阅读 · 0 评论 -
一文把Servlet整的明明白白
一、Servlet概述 1.1、Servlet是什么 Servlet 是 JavaEE 规范之一。规范就是接口。 Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。 Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。 简单来说:Servlet 是运行在 Web服务器(如Tomcat服务器)的,使用 Java编写的小应用程序。 1.2、Servl.原创 2022-01-04 20:54:49 · 143 阅读 · 0 评论 -
一份简单够用的 Nginx Location 配置讲解
前言 Location 是 Nginx 中一个非常核心的配置,这篇重点讲解一下 Location 的配置问题以及一些注意事项。 语法 关于 Location,举个简单的配置例子: http { server { listen 80; server_name www.yayujs.com; location / { root /home/www/ts/; index index.html; } } } 大致的意思...原创 2022-01-04 20:38:21 · 965 阅读 · 0 评论 -
【对线面试官】Kafka基础
面试官:今天要不来聊聊消息队列吧?我看你项目不少地方都写到Kafka了 候选者:嗯嗯 面试官:那你简单说明下你使用Kafka的场景吧 候选者:使用消息队列的目的总的来说可以有三种情况:解耦、异步和削峰 候选者:比如举我项目的例子吧,我现在维护一个消息管理平台系统,对外提供接口给各个业务方调用 候选者:他们调用接口之后,实际上『不是同步』下发了消息。 候选者:在接口处理层只是把该条消息放到了消息队列上,随后就直接返回结果给接口调用者了。 候选者:这样的好处就是: 候选者:1. 接口的吞吐量..原创 2021-12-30 20:37:34 · 87 阅读 · 0 评论 -
面试官问我JVM调优,我忍不住了,哈哈哈哈
面试官:今天要不来聊聊JVM调优相关的吧? 面试官:你曾经在生产环境下有过调优JVM的经历吗? 候选者:没有 面试官:… 候选者:嗯…是这样的,我们一般优化系统的思路是这样的 候选者:1. 一般来说关系型数据库是先到瓶颈,首先排查是否为数据库的问题 候选者:(这个过程中就需要评估自己建的索引是否合理、是否需要引入分布式缓存、是否需要分库分表等等) 候选者:2. 然后,我们会考虑是否需要扩容(横向和纵向都会考虑) 候选者:(这个过程中我们会怀疑是系统的压力过大或者是系统的硬件能力不足...原创 2021-12-30 20:35:02 · 105 阅读 · 0 评论 -
双十一期间Kafka以这种方式丢消息让我猝不及防
讲真,我今年的双十一有点“背”,负责的Kafka集群出了一些幺蛾子,但正是这些幺蛾子,让我这个双十一过的非常充实,也让我意识到如果不体系化学习Kafka,是无法做到生产集群及时预警,将故障扼杀在摇篮中,因此也下定决心研读kafka的内核。 本文就先来分享一个让我始料未及的故障:Kafka生产环境大面积丢失消息。 首先要阐述的是消息丢失并不是因为断电,而且集群的副本数量为3,消息发送端设置的acks=-1(all)。 这样严苛的设置,那为什么还会出现消息丢失呢?请听笔者慢慢道来。 1、故障现象 故障原创 2021-12-30 19:44:12 · 562 阅读 · 0 评论 -
都这么卷了,不懂MyBatis插件开发怎么行,教你实现一个MyBatis分页插件
MyBatis可谓是Java开发工程师必须要掌握的持久层框架,它能够让我们更容易的通过Java代码操作数据库,并且它还有很高的扩展性,我们可以自定义插件,去让MyBatis的功能变的更为强大,本篇文章我们就以打印SQL,SQL分页为例,来讲一下如何开发MyBatis的插件。 MyBatis 四大内置对象 Executor 执行器 实际用来执行SQL的对象 StatementHandler 数据库会话处理器 编译/处理SQL语句的 PreparedStatementHanler 创..原创 2021-12-29 20:35:21 · 96 阅读 · 0 评论 -
面试官:说说常用的排序算法呗
十大排序算法思路汇总 在面试的过程中经常会遇到手写排序算法,所以本文就简单总结一下。不对算法的细节做介绍,只做一个概括性的描述。 交换类:通过元素之间的两两交换来实现排序 插入类:将数分为2部分,依次将无序的数插入到有序的数列中 选择类:从待排序数列中找到最小值或者最大值元素,放到已拍好序的序列后面 计数排序和基数排序可以认为是桶排序的一种特殊实现,都不是通过元素之间的比较来实现排序的 冒泡排序 冒泡排序,从头开始,依次比较数组中相邻的2个元素,如果后面的数比前面的数大,则交换2个数...原创 2021-12-29 20:32:11 · 101 阅读 · 0 评论 -
都这么卷了,不懂MyBatis插件开发怎么行,教你实现一个MyBatis分页插件
MyBatis可谓是Java开发工程师必须要掌握的持久层框架,它能够让我们更容易的通过Java代码操作数据库,并且它还有很高的扩展性,我们可以自定义插件,去让MyBatis的功能变的更为强大,本篇文章我们就以打印SQL,SQL分页为例,来讲一下如何开发MyBatis的插件。 MyBatis 四大内置对象 Executor 执行器 实际用来执行SQL的对象 StatementHandler 数据库会话处理器 编译/处理SQL语句的 PreparedStatementHanler 创..原创 2021-11-30 15:33:47 · 133 阅读 · 0 评论 -
什么是BufferedWriter字符缓冲输出流?
BufferedWriter的中文意思就是字符缓冲输出流,可以写入单个字符,也可以写入字符数组,或者是字符串的某一部分,一句话就是非常好用。 下面是BufferedWriter实例中一个最简单的结构。 public static void main(String[] args) { BufferedWriter bw = null; bw = Files.newBufferedWriter("test.txt", StandardCharsets.UTF_8); bw.write("hell.原创 2021-11-30 15:32:56 · 328 阅读 · 0 评论 -
面试官:你说你精通Redis,你看过持久化的配置吗?
前边我们已经介绍了Redis五种数据类型的命令与配置文件的基本配置,今天让我们从理论和配置两个层面来揭开Redis持久化的神秘面纱。 所谓持久化可以简单理解为将内存中的数据保存到硬盘上存储的过程。持久化之后的数据在系统重启或者宕机之后依然可以进行访问,保证了数据的安全性。 Redis有两种持久化方案,一种是快照方式(SNAPSHOTTING),简称RDB;一种是只追加模式(APPEND ONLY MODE),称为AOF。接下来让我们分别了解一下它们的使用与注意事项。 RDB RDB为Redis Da.原创 2021-11-30 15:31:58 · 96 阅读 · 0 评论 -
Redis 缓存过期处理与内存淘汰机制
已过期的key如何处理? 设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略 redis有两种策略: (主动)定时删除 定时随机的检查过期的key,如果过期则清理删除。(每秒检查次数在redis.conf中的hz配置) (被动)惰性删除 当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对cpu比较友好,不会有太多的损耗,但是内存占用会比较高。 所以,虽然.原创 2021-11-30 15:31:08 · 101 阅读 · 0 评论