java基础
文章平均质量分 78
zhangkaixuan456
这个作者很懒,什么都没留下…
展开
-
从Java BIO到NIO再到多路复用,看这篇就够了
实际上,它是一个索引值,指向一个文件记录表,该表记录内核为每一个进程维护的文件记录信息。看下入参,需要用户主动传入要监视的文件描述符数量,可读文件描述符集合,可写文件描述符集合,异常文件描述符集合等入参,实际上就干了一件事,以前由用户态去循环遍历所有客户端产生系统调用(如果10k个socket,需要产生10k个系统调用),改成了由内核遍历,如果select模式,只需10系统调用(因为select最大支持传入1024个文件描述符),如果是poll模式(不限制文件描述符数量),则只需1次系统调用。原创 2023-06-06 12:51:22 · 175 阅读 · 0 评论 -
微信扫码授权到登录网页,中间究竟发生了什么?
在微信开放平台进行配置和申请,获得,配置好自己的回调URI根据拿到的数据,配上指定的参数得到二维码的URL微信SDK在二维码页面进行15s一次轮询检测,对于不同的状态有不同的状态码:如果没有扫码:状态码为408,且code为空如果扫码既不接受也不拒绝授权:状态码为404,且code为空如果扫码但是拒绝授权:状态码为403,且code为空如果扫码并且同意授权:状态码为405,返回一个code微信SDK检测到状态码和code后,进行对之前配置的回调URI的重定向,带上code。原创 2023-05-29 20:23:05 · 1610 阅读 · 3 评论 -
数据结构——数组
数组基础数组最大优点:快速索引。实现我们自己的数组1.使用泛型放置“任何”数据类型2.动态数组,自动调节数组长度。public class Array<E> { private E[] data; private int size; // 构造函数,传入数组的容量capacity构造Array public Array(int c...原创 2019-07-09 00:23:23 · 228 阅读 · 0 评论 -
git常用命令行操作
Git的配置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。下面是我整理的常用 Git 命令清单。Repository:仓库区(或本地仓库)Index / Stage:暂存区。Workspace:工作区。Remote:远程仓库。原创 2022-11-05 17:44:10 · 313 阅读 · 0 评论 -
TCC分布式事务——设计思想及其可能遇到的问题
今天进行了 Seata TCC 模式的深度解析。主要介绍 Seata TCC 模式的原理,从 TCC 业务模型与并发控制的角度告诉大家怎么设计一个 TCC 的接口以及怎么处理空回滚、幂等、悬挂等异常,最后对蚂蚁金服内部对 TCC 的性能优化点简单介绍,使得 TCC 模式能够满足更高的业务需求。业务各有不同,有些业务能容忍短期不一致,有些业务的操作可以幂等,无论什么样的分布式事务解决方案都有其优缺点,没有一个银弹能够适配所有。...转载 2022-08-16 16:42:32 · 524 阅读 · 1 评论 -
mq消息积压怎么对应
你看这问法,其实本质针对的场景,都是说,可能你的消费端出了问题,不消费了,或者消费的极其极其慢。没有,谁让你第一个方案执行的太慢了,你临时写程序,接入数据来消费,消费一个丢弃一个,都不要了,快速消费掉所有的消息。所以就这事儿,其实线上挺常见的,一般不出,一出就是大case,一般常见于,举个例子,消费端每次消费之后要写mysql,结果mysql挂了,消费端hang那儿了,不动了。关于这个事儿,我们一个一个来梳理吧,先假设一个场景,我们现在消费端出故障了,然后大量消息在mq里积压,现在事故了,慌了。...原创 2022-08-03 16:11:05 · 1017 阅读 · 0 评论 -
Kafka 面试连环炮, 看看你能撑到哪一步?
大家好,我是 华仔, 又跟大家见面了。之前有粉丝留言说能否总结和分享一些 Kafka 相关的面试题。今天我们就来安排一期关于 Kafka 的核心面试题连环炮, 从「基础知识」、「进阶提升」、「架构调优」 三个方向梳理面试题,希望在金三银四的关键节点可以帮助到大家。由于内容很多,打算拆分成「上中下」三篇,本文是面试系列的中篇。这篇文章干货很多,希望你可以耐心读完。01 Kafka 整体架构图一个典型的 Kafka 集群中包含若干 Producer,若干 Broker「Kafka支持水平扩展,一般 Broke转载 2022-06-30 18:46:15 · 196 阅读 · 0 评论 -
Netty——内核角度看IO模型
从今天开始我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架。它的设计异常优雅简洁,扩展性高,稳定性强。拥有非常详细完整的用户文档。同时内置了很多非常有用的模块基本上做到了开箱即用,用户只需要编写短短几行代码,就可以快速构建出一个具有,,,等特征的高并发网络应用程序。本文我们来探讨下支持Netty具有,特征的基石----netty的。由Netty的开始,我们来正式揭开本系列Netty源码解析的序幕:网络包收发过程.png当通过网络传输到达网卡时,网卡会将网络数据帧通过放到转载 2022-06-30 18:14:20 · 231 阅读 · 2 评论 -
Nginx 面试题 40 问
目录什么是Nginx?Nginx 应用场景?Nginx 怎么处理请求的?Nginx 是如何实现高并发的?什么是正向代理?什么是反向代理?反向代理服务器的优点是什么?Nginx 目录结构有哪些?Nginx 配置文件 nginx.conf 有哪些属性模块?cookie 和 session 区别?为什么 Nginx 不使用多线程?nginx和apache的区别为什么要做动、静分离?什么叫 CDN 服务?Nginx 怎么做的动静分离?Nginx 负载均衡的算法怎么实现的?策略有哪些?如何用 Nginx 解决前端跨域原创 2022-06-28 18:39:06 · 385 阅读 · 0 评论 -
git Git 45 个经典操作场景,git操作大全,专治不会合代码
git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令。下边我们整理了45个日常用git合代码的经典操作场景,基本覆盖了工作中的需求。如果你用 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。你就可以用下面的命令显示当前上的最近一次的提交(commit):或者我的提交信息(commit message)写错了如原创 2022-06-16 17:15:33 · 563 阅读 · 0 评论 -
自定义注解支持SpEL表达式(动态参数)
实际生产中一个案例:利用AOP生成用户操作日志代码直接复制过去就可以测试,亲测可用2.定义spel解析工具类3.定义切面类4.方法上使用日志注解原创 2022-06-09 20:41:45 · 2681 阅读 · 1 评论 -
mongo,mongodb优化思路
MongoDB 是高性能数据,但是在使用的过程中,大家偶尔还会碰到一些性能问题。MongoDB和其它关系型数据库相比,例如 SQL Server 、MySQL 、Oracle 相比来说,相对较新,很多人对其不是很熟悉,所以很多开发、DBA往往是注重功能的实现,而忽视了性能的要求。其实,MongoDB和 SQL Server 、MySQL 、Oracle 一样,一个 数据库对象的设计调整、索引的创建、语句的优化,都会对性能产生巨大的影响。为充分挖掘MongoDB性能,简单列举以下Mongodb优化方式:文档中原创 2022-06-09 20:36:20 · 1610 阅读 · 0 评论 -
Spring Boot 通过RoutingDataSource+自定义注解实现读写分离
第一步:配置多数据源Spring Boot 基础就不介绍了,推荐下这个实战教程:https://github.com/javastacks/spring-boot-best-practice首先,我们在 SpringBoot 中配置两个数据源,其中第二个数据源是ro-datasource:spring: datasource: jdbc-url: jdbc:mysql://localhost/test username: rw password: rw_passwo原创 2022-04-29 10:21:10 · 963 阅读 · 0 评论 -
图解文件系统——我见过讲文件系统讲的最好的文章了
你手里有一块硬盘,大小为 1T你还有一堆文件这些文件在硬盘看来,就是一堆二进制数据而已你准备把这些文件存储在硬盘上,并在需要的时候读取出来。要设计怎样的软件,才能更方便地在硬盘中读写这些文件呢?1首先我不想和复杂的扇区,设备驱动等细节打交道,因此我先实现了一个简单的功能,将硬盘按逻辑分成一个个的块,并可以以块为单位进行读写。每个块就定义为两个物理扇区的大小,即 1024 字节,就是 1KB 啦。硬盘太大不好分析,我们就假设你的硬盘只有 1MB,那么这块硬盘则有 1转载 2022-04-20 09:43:54 · 263 阅读 · 0 评论 -
spring @retryable 一个注解,优雅的实现循环重试功能
在实际工作中,重处理是一个非常常见的场景,比如: 发送消息失败。 调用远程服务失败。 争抢锁失败。 这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。一、@Retryable是什么?spring系列的spring-retry是另一个实用原创 2022-04-06 10:07:04 · 458 阅读 · 1 评论 -
Nacos服务注册的原理——源码分析
Nacos 是目前国内非常火的一个服务注册与发现的中间件,有不少公司都在采用 Nacos,因此面试中被问到的概率也是非常高的!Nacos 服务注册需要具备的能力: 服务提供者把自己的协议地址注册到Nacos server 服务消费者需要从Nacos Server上去查询服务提供者的地址(根据服务名称) Nacos Server需要感知到服务提供者的上下线的变化 服务消费者需要动态感知到Nacos Server端服务地址的变化 作为注册中心所需要的能力大多如此,我们转载 2022-04-06 09:19:53 · 233 阅读 · 0 评论 -
SpringBoot 启动时自动执行自定义代码的几种方式
目录java自身的启动时加载方式Spring启动时加载方式代码测试总结目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用@PostConstruct注解实现。当然也可以去实现Spring的ApplicationRunner与CommandLineRunner接口去实现启动后运行的功能。在这里整理一下,在这些位置执行的区别以及加载原创 2022-03-29 09:39:40 · 1389 阅读 · 0 评论 -
SQL优化万能公式——5大步骤+10个案例
一、前言在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。二、SQL优化一般步骤1、通过慢查日志等定位那些执行效率较低的SQL语句2、explain 分析SQL的执行计划需要重点关注type、rows、filtered、extra。type由上至下,效率越来越高。 ALL全表扫描; index索引全扫描; ran..原创 2022-03-23 10:26:44 · 304 阅读 · 1 评论 -
慢sql治理经典案例分享——阿里技术
菜鸟供应链金融慢sql治理已经有一段时间,自己负责的应用持续很长时间没有慢sql告警,现阶段在推进组内其他成员治理应用慢sql。这里把治理过程中的一些实践拿出来分享下。一 全表扫描1 案例SELECT count(*) AS tmp_count FROM ( SELECT * FROM `XXX_rules` WHERE 1 = 1 ORDER BY gmt_create DESC ) a2 溯源在分页查询治理的文章里已经介绍过我们系统旧的分页查询逻辑,上面的查询sql明显就...原创 2022-02-28 09:11:13 · 595 阅读 · 0 评论 -
pg查看某个表的索引信息,优化sql语句
目录1. 查询表的索引2、安装pg_stat_statements插件此插件用于统计数据库的资源消耗,分析SQL语句3、配置pg_stat_statements采样参数4、分析SQL可以通过查询pg_stat_statements视图,获取统计信息5.获取不同情况的SQ1. 查询表的索引select * from pg_indexes where tablename='student';select * from pg_statio_all_indexes where rel原创 2022-02-23 14:18:01 · 8715 阅读 · 0 评论 -
java 统一日志格式,方便线上定位 bug
目录请统一日志格式将request和response放置在一起日志里加入traceId日常工作中,程序员需要经常处理线上的各种大小故障,如果业务代码没打印日志或者日志打印的不好,会极大的加大了定位问题的难度,使得解决bug的时间变长了。对于那种影响比较大的bug,处理时间是分秒必争的,慢几秒处理完,可能GMV就哗啦啦的掉了很多。一个程序员是否优秀,其中一个判断维度就是:处理线上问题是否快狠准,而其中日志是帮我们快速定位问题的绝佳手段。下面分享一下笔者平时在业务系统里记日志的一些手原创 2022-02-18 18:12:12 · 378 阅读 · 0 评论 -
SQL优化 —— in与not in,exist
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select*fromt1wherephonenotin(selectphonefromt2)直接就把我跑傻了。。。十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。原来not in 是不能命中索引的。。。。改成 NOT EXISTS 之...转载 2022-02-14 17:29:06 · 770 阅读 · 0 评论 -
数据库全表扫描,会不会把数据库内存打爆?
我经常会被问到这样一个问题:我的主机内存只有 100G,现在要对一个 200G 的大表做全表扫描,会不会把数据库主机的内存用光了?这个问题确实值得担心,被系统 OOM(out of memory)可不是闹着玩的。但是,反过来想想,逻辑备份的时候,可不就是做整库扫描吗?如果这样就会把内存吃光,逻辑备份不是早就挂了?所以说,对大表做全表扫描,看来应该是没问题的。但是,这个流程到底是怎么样的呢?全表扫描对 server 层的影响假设,我们现在要对一个 200G 的 InnoDB 表 db1. t,原创 2022-01-17 13:49:35 · 749 阅读 · 0 评论 -
手把手教你搭建 RabbitMQ 集群
目录1. 两种模式1.1 普通集群1.2 镜像集群1.3 节点类型2. 搭建普通集群2.1 预备知识2.2 开始搭建2.3 代码测试2.4 反向测试3. 搭建镜像集群3.1 网页配置镜像队列3.2 命令行配置镜像队列单个的 RabbitMQ 肯定无法实现高可用,要想高可用,还得上集群。1. 两种模式说到集群,小伙伴们可能第一个问题是,如果我有一个 RabbitMQ 集群,那么是不是我的消息集群中的每一个实例都保存一份呢?这其实就涉及到 Rabb原创 2022-01-04 15:19:18 · 311 阅读 · 0 评论 -
怎么画架构图
分享、评审、述职、答辩,只要你在程序员这个行业,就几乎离不开要画图。一提到画图很多人就想站会起来喊,”内卷“、”内卷啦“、”PPT工程师“,但程序代码本身就是一种数学逻辑的具体实现,如果没有一些图表配合文字的阐述,讲真很难让所有人都能在共同的共识下进行交流。这不像是文科,”八表流云澄夜色,九霄华月动春城“ 上来就能联想到它是在描述啥。但是偏理科代码逻辑或架构设计,只能把抽象的内容用图表的形式展现出来,让大家在同一的共识下共同协同工作。而我们画的架构图、流程图、结构图、功能图、逻辑图等,都需要好看原创 2021-12-31 15:42:10 · 1834 阅读 · 0 评论 -
mySQL 的 binlog——删库不跑路
目录1. binlog2. 开启 binlog3. 常见 binlog 操作4. 数据恢复实战我们常常听人说,只要你愿意,MySQL 可以恢复至半个月甚至一个月以内的任何一个状态。网上也有很多删库跑路的段子。。。MySQL 中的日志比较重要的有 binlog(归档日志)、redo log(重做日志)以及 undo log,那么跟我们本文相关的主要是 binlog。1. binlogbinlog 我们中文一般称作归档日志,如果大家看过松哥之前发的 MySQL 主从搭建,应该对这原创 2021-12-31 14:47:07 · 383 阅读 · 0 评论 -
java8 optional实战性理解——别再用if(obj==null)做空判断
1.前言相信不少小伙伴已经被java的NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨, 有大佬说过“防止 NPE,是程序员的基本修养。”但是修养归修养,也是我们程序员最头疼的问题之一,那么我们今天就要尽可能的利用Java8的新特性 Optional来尽量简化代码同时高效处理NPE(Null Pointer Exception 空指针异常)2.认识Optional并使用简单来说,Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 nul原创 2021-12-31 10:08:34 · 569 阅读 · 0 评论 -
@Validated——java参数校验
目录为什么要用validator实战演练1. @Validated 声明要检查的参数2. 对参数的字段进行注解标注3. 在全局校验中增加校验异常4. 测试自定义参数注解1. 比如我们来个 自定义身份证校验 注解2. 然后自定义Validator3. 使用自定义的注解4.使用groups的校验5.restful风格用法总结为什么要用validator1、javax.validation的一系列注解可以帮我们完成参数校验,免去繁琐的串行校验不然我们原创 2021-12-30 11:16:57 · 8536 阅读 · 2 评论 -
分布式id生成系统——滴滴开源
目录简介tinyid系统架构图性能与可用性性能可用性Tinyid的特性推荐使用方式tinyid的原理Id生成系统要点Tinyid的实现原理DB号段算法描述号段生成方案的简单架构简单架构的问题优化办法如下:项目地址ID Generator id生成器 分布式id生成系统,简单易用、高性能、高可用的id生成系统简介Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参考美团leaf或者tinyid原原创 2021-12-30 10:29:39 · 493 阅读 · 0 评论 -
druid详解——连接池看这篇就够了
属性跟 dbcp 连接池的差不多.加入了 filters 监控(value 值要有 stat) 在web.xml里加入下面的Servlet 就可查看 例:http://localhost:8080/BenbearGame_test/druid跟spring一起用时( 只要配置 initialSize maxActive 就可以),加入其实配置性能不好,官方文档里也不没加其它属性<!-- 数据源 org.apache.commons.dbcp.BasicDataSource com.a...原创 2021-12-24 09:54:08 · 4457 阅读 · 0 评论 -
redis 数据结构——2w 字,40 张手绘图详细介绍
目录正文键值对数据库是怎么实现的?SDS链表压缩列表哈希表整数集合跳表quicklistlistpack正文Redis 为什么那么快?除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。因此,这次我们就来好好聊一下 Redis 数据结构,这个在面试中太常问了。注意,Redis 数据结构并不是指 String(字符串)对象、List(列表)对象、Hash转载 2021-12-20 18:06:07 · 613 阅读 · 0 评论 -
chrome 灵魂插件
给大家推荐一些常用的 chrome 的插件,还是非常不错的,大家可以用起来看看。前言相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(Extensions)。下面的很多插件都是工具插件,看完保证你工作效率、心情提高1倍。1、OneTab:一键合并 tabTab 过多的时候,要关闭浏览器的时候OneTab可以帮助你快速的保存、整理浏览器。2、掘金:最新的技术动态每次打开新原创 2021-12-20 17:42:08 · 421 阅读 · 0 评论 -
redisson分布式锁,实战
在进入正文之前,我们先带着问题去思考: 什么时候需要分布式锁? 加、解锁的代码位置有讲究么? 如何避免出现锁再也无法删除? 超时时间设置多少合适呢? 如何避免锁被其他线程释放 如何实现重入锁? 主从架构会带来什么安全问题? 什么是Redlock Redisson 分布式锁最佳实战 看门狗实现原理 …… 什么时候用分布式锁?❝码哥,说个通俗的例子讲解下什么时候需要分布式锁呢?诊所只有.转载 2021-12-20 13:52:08 · 835 阅读 · 3 评论 -
Integer和int == 总结——看到有人代码integer比较用了==,总结一下
public static void main(String[] args) { int i1 = 128; Integer i2 = 128; Integer i3 = new Integer(128); System.out.println(i1 == i2);//true System.out.println(i1 == i3);//true System.out.println("***********************************.原创 2021-12-14 19:18:24 · 584 阅读 · 0 评论 -
linux安装 jdk8
操作系统:Centos6.4 64位工具:Xftp5、Xshell51.下载jdk8方法一:官网手动下载下载Linux环境下的jdk1.8http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html目前在官网下载低于jdk1.8的java jdk的时候需要登陆,这边分享一个账号,方便下载账号:2696671285@qq.com密码:Oracle123账号提供者:http.原创 2021-12-11 22:54:47 · 248 阅读 · 0 评论 -
Intellij IDEA 神级插件——效率提升 10 倍
安装好Intellij idea之后,进行如下的初始化操作,工作效率提升十倍。一. 安装插件1. Codota 代码智能提示插件只要打出首字母就能联想出一整条语句,这也太智能了,还显示了每条语句使用频率。原因是它学习了我的项目代码,总结出了我的代码偏好。如果让它再加上机器学习,人工智能写代码的时代还会远吗?2. Key Promoter X 快捷键提示插件每次都会在右下角弹窗提示,帮助我们快速熟悉快捷键。3. CodeGlance 显示代码缩略图插件当代码很多原创 2021-12-06 17:05:32 · 476 阅读 · 0 评论 -
Bean Searcher——多条件查询神器
目录首先数据库有两张表接下来我们要实现一个用户查询的功能后端接口该怎么写呢?手把手:只一行代码实现以上需求添加依赖然后写个实体类来承载查询的结果接着就可以写用户查询接口了这样就完了?那我们来测一下这个接口,看看效果吧Bean SearcherMapSearcher 与 BeanSearcher参数构建工具运算符约束条件约束参数过滤器参数咋这么怪,这么多呢,和前端有仇么入参是 request,我 swagger 文档不好渲染了呀结语项目转载 2021-12-02 11:31:52 · 4940 阅读 · 2 评论 -
分布式id生成系统——滴滴开源,有点牛逼
目录简介tinyid系统架构图性能与可用性性能可用性Tinyid的特性推荐使用方式tinyid的原理Id生成系统要点Tinyid的实现原理DB号段算法描述号段生成方案的简单架构简单架构的问题优化办法如下:项目地址ID Generator id生成器 分布式id生成系统,简单易用、高性能、高可用的id生成系统简介Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参考美团leaf或者tinyid原原创 2021-12-02 11:23:21 · 288 阅读 · 0 评论 -
nginx配置——location与rewrite规则教程
location 教程示例:location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] }location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] }location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只原创 2021-11-29 22:55:50 · 332 阅读 · 0 评论 -
pg PostGIS教程:空间关系
到目前为止,我们只使用了测量(ST_Area、ST_Length)、序列化(ST_GeomFromText)或者反序列化(ST_AsGML)几何图形(geometry)的空间函数。这些函数的共同之处在于它们一次只能处理一个几何图形。空间数据库之所以强大,是因为它们不仅能存储几何图形,而且还能够分析几何图形之间的关系。诸如"哪一个是离公园最近的自行车位?"或者"地铁线路和街道的交叉路口在哪里?"这样的问题,只能通过比较、分析表示自行车位、街道和地铁线路的几何图形来回答。OGC标准定义了以下一组用于原创 2021-11-12 09:58:54 · 1744 阅读 · 0 评论