自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序猿进阶

当你真的爱上编程的时候,其实编程就是你的娱乐方式。

  • 博客(168)
  • 资源 (7)
  • 论坛 (3)
  • 收藏
  • 关注

原创 MySQL 高级查询截取分析【Explain】

慢日志分析流程如下:【1】观察(至少跑一天),看看生产慢 SQL 情况。【2】开启慢查询日志,设置阈值,比如对超过5秒的 SQL 语句进行抓取。【3】explain+慢 SQL 分析。【4】show profile 查询慢 SQL 在 MySQL 中的执行细节和生命周期情况。【5】运维经理 or DBA 对数据库参数进行调优。一、查询优化【1】永远小表驱动大表(存在连接问题),类似嵌套循环 Nested Loop。例如:当 B表的数据集小于 A表时,用 In 优于 Exist。因为先执行B

2021-06-06 14:12:57 104

原创 Spring 事务——源码分析

【事务环境搭建工作】:链接注解 @EnableTransactionManagement:在配置类中添加注解@EnableTransactionManagement,便开启了事务功能。此注解也是了解Spring事务源码的入口。@EnableTransactionManagementpublic class TxConfig {【1】@EnableTransactionManagement 利用 TransactionManagementConfigurationSelector 给容器中导入组件

2021-05-11 23:14:09 59 2

原创 Spring AOP面向切面编程案例 (注解驱动开发)

AOP(动态代理):指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;【1】导入 aop 模块;Spring AOP:(spring-aspects);【2】定义一个业务逻辑类(MathCalculator),在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx);【3】定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知 MathCalculator.div 运行到哪里然后执行;通知方法: ■ 前置通知(@Befor..

2021-05-11 23:11:09 160 2

原创 Java 内存模型

一、并发编程模型的两个关键问题【1】并发中常见的两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递;【2】在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共数据进行隐式通信。在消息传递的并发模型里,如果没有公共状态,线程之间必须通过发送消息来显示进行通讯;【3】同步是指程序中用于控制不同线程间操作发生相对顺序的机制,可以理解为协同步调,按预定的先后次序运行。这里的“同”字应是指协同、

2021-04-27 23:15:07 24

原创 MyCat 分片

如今随着互联网的发展,数据的量级也是呈指数的增长,从 GB 到 TB 到 PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候 NoSQL 的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合 NoSQL 是无法满足的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候 NoSQL 肯定是无法满足的,所以还是需要使用关系型数据库。如果使用关系型数据库解决海量存储的问题呢?此时就需.

2021-04-27 22:59:18 69

原创 ShardingSphere 数据分片之 Sharding-JDBC 深入理解

MySQL 的存储单位是 page[16kb],索引使用 B+Tree,深度为3(3次 IO便能查出数据)。为了提高查询速度,存储单元中都存储的是索引的指针。MySQL 内部索引指针大小在 InnoDB源码中设置为 6个字节+例如 ID类型 bigint(long) 占8个字节 = 14字节,那么一页存储 16*1024/14 ≈ 1170行数据。因为深度为3,表示此时一张表最多存储(这里假设叶子节点一行记录的数据大小为1k,实际上现在很多互联网业务数据记录大小通常就是1K左右)16[叶子节点只能存16行数

2021-04-24 21:16:20 724

原创 Kafka 事务

在了解 Kafka的事务之前,先说一下 Kafka中幂等和事务(Kafka 0.11.0.0版本引入的两个特性)以此来实现 Exactly once(精确一次)了解更多链接。幂等:生产者在进行重试的时候有可能会重复写入消息,而使用 Kafka的幂等性功能之后就可以避免这种情况。生产者事务相关配置开启幂等性功能的方式很简单,只需显式地将生产者客户端参数 enable.idempotence=true(默认值为false)Kafka的幂等只能保证单个生产者会话(session)中单分区的幂等。幂

2021-04-24 09:40:45 84 2

原创 Kafka 实现延迟队列、死信队列、重试队列

Kafka中实现延迟队列在发送延时消息的时候并不是先投递到要发送的真实主题(real_topic)中,而是先投递到一些 Kafka 内部的主题(delay_topic)中,这些内部主题对用户不可见,然后通过一个自定义的服务拉取这些内部主题中的消息,并将满足条件的消息再投递到要发送的真实的主题中,消费者所订阅的还是真实的主题。如果采用这种方案,那么一般是按照不同的延时等级来划分的,比如设定5s、10s、30s、1min、2min、5min、10min、20min、30min、45min、1hour、2

2021-04-24 09:40:42 833

原创 RabbitMQ 消息中间件总结

RabbitMQ 是实现高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源代理软件,也称为面向消息的中间件。支持多种操作系统、多种编程语言。RabbitMQ 服务器使用 Erlang 语言编写,其集群和故障转移是构建在开放电信平台框架上的。AMQP 是一个面向消息中间件的开放式应用层协议。定义消息方向、消息队列、消息路由、可靠性、安全性等特性。要求消息的提供者和客户端接收者的行为要实现对不同供应商可以用相同的方式(FTP/HTTP/SMTP等)进行互相操

2021-04-24 09:40:40 31

原创 leader epoch

leader epoch 代表 Leader 的纪元信息(epoch),初始值为0。每当 Leader 变更一次,leader epoch 的值就会加1,相当于为 Leader 增设了一个版本号。每个副本中还会增设一个矢量 <LeaderEpoch >= StartOffset>,其中 StartOffset 表示当前 LeaderEpoch 下写入的第一条消息的偏移量。假设有两个节点A 和 B,B是 leader节点,里面的数据如图:A发生重启之后,A不是先忙着截断日志而是先发送

2021-04-23 23:20:19 213

原创 Kafka 消息送达语义

消息送达语义是消息系统中一个常见的问题,主要包含三种语义:【1】At most once:消息发送或消费至多一次;【2】At least once:消息发送或消费至少一次;【3】Exactly once:消息恰好只发送一次或只消费一次;下面分别从生产者和消费者的角度来阐述这三种消息送达语义。生产者 Producer从 Producer的角度来看,At most once意味着 Producer发送完一条消息后,不会确认消息是否成功送达。这样从 Producer的角度来看,消息仅仅被发送一次,也就存

2021-04-23 23:15:45 73

原创 Kafka 集群调优

kafka 集群搭建链接单个 kafka服务器足以满足本地开发或 POC要求,使用集群的最大好处是可以跨服务器进行负载均衡,再则就是可以使用复制功能来避免因单点故障造成的数据丢失。在维护 Kafka 或底层系统时,使用集群可以确保为客户端提供高可用性。需要多少个 Broker一个 kafka 需要多少个 broker取决于以下几个因素:【1】需要多少磁盘空间来保留数据,以及单个broker 有多少空间可用。如果整个集群需要保留 10TB(每天2千万的数据,够用2年)的数据,每个 broke

2021-04-23 23:09:39 127

原创 Kafka为什么比其他消息中间件快

无论 Kafka 作为 MQ 也好,还是作为存储层也罢,无非就是两个功能,一是 Producer 生产的数据存到 Broker,二是 Consumer 从 Broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,下面我们就聊聊 Kafka 快的原因。一、利用 Partition 实现并行处理我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布还是订阅,都要指定 Topic。Topic 只是一个逻辑的概念。每个 Topic 都包含一个或多个 Partition,不同.

2021-04-23 23:08:28 44

原创 Kafka 管理【主题、分区、消费者组】

主题操作使用 kafka-topics.sh 工具可以执行主题的大部分操作。可以用它创建、修改、删除和查看集群里的主题。要使用该工具的全部功能,需要通过 --zookeeper参数提供 Zookeeper的连接字符串。kafka 的大部分命令行工具直接操作 Zookeeper 上的元数据,并不会连接到 broker上。因此,要确保所使用工具版本与集群里的 broker版本相匹配。直接使用集群 broker自带的工具是最保险的。创建主题在集群中创建一个主题需要3个参数:主题名字(可以包含字

2021-04-23 23:05:03 131

原创 SpringBoot 整合 Avro 与 Kafka

【需求】:生产者发送数据至 kafka 序列化使用 Avro,消费者通过 Avro 进行反序列化,并将数据通过 MyBatisPlus 存入数据库。一、环境介绍【1】Apache Avro 1.8;【2】Spring Kafka 1.2;【3】Spring Boot 1.5;【4】Maven 3.5;<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"

2021-04-23 22:54:32 311

原创 Kafka 物理存储机制

一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从 Kafka文件存储机制和物理结构角度,分析 Kafka是如何实现高效文件存储,及实际应用效果。Kafka 的基本存储单位是分区。在配置 Kafka 的时候,管理员指定了一个用于存储分区的目录清单 log.dirs 参数的值。一、分区分配创建主题时,Kafka 首先决定如何在 broker 之间分配分区。假设有 6个 broker,打算创建一个包含 10个分区的主题。并且复制系数是3,相当于 .

2021-04-23 22:50:39 52

原创 Kafka 消费者读取数据

消费者不需要自行管理 offset(分组+topic+分区),系统通过 broker 将 offset 存放在本地。低版本通过 zk 自行管理。系统自行管理分区和副本情况。消费者断线后会自动根据上一次记录的 offset 去获取数据(默认一分钟更新一次 offset),同一个分组中的客户不能同时消费同一个分片。不同的 group 记录不同的 offset,这样不同程序读取同一个 topic 才不会因为 offset 互相影响。一、消费者组分区的所有权从一个消费者转移到另一个消费者,这样的行为称为

2021-04-23 22:37:41 255

原创 Zookeeper Leader选举

Leader选举是保证分布式数据一致性的关键所在。当 Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入 Leader选举:【1】服务器初始化启动;【2】服务器运行期间无法和 Leader保持连接;服务器启动时期的 Leader选举若进行 Leader选举,则至少需要二台机器,这里选取三台机器组成的服务器集群为例。在集群初始化阶段,当有一台服务器 Server1启动时,其单独无法进行和完成 Leader选举,当第二台服务器 Server2启动时,此时两台机器可以相互通信,每台机

2021-04-23 22:34:31 30

原创 Kafka 之 HW 与 LEO

HW(High Watermark):俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。分区 ISR 集合中的每个副本都会维护自身的 LEO(Log End Offset):俗称日志末端位移,而 ISR 集合中最小的 LEO 即为分区的 HW,对消费者而言只能消费 HW 之前的消息。LEO:该副本底层 log文件下一条要写入的消息的位移,例如 LEO=10则当前文件已经写了了10条消息,位移是[0,10)。HW:所有分区已提交的的位移,一般HW&

2021-04-23 22:08:47 163

原创 Kafka 生产者写入数据

一、生产者发送消息的步骤创建一个 ProducerRecord 对象,对象中包含目标主题和要发送的内容。还可以指定键或分区。在发送 ProducerRecord 对象时,生产者要先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。接下来,数据被传给分区器。分区器直接把指定的分区返回。如果没有指定分区,分区器会根据 ProducerRecord 对象的键来选择一个分区。选择好分区之后,生产者就知道该往哪个这主题和分区发送这条记录了。接着,这条记录被添加到一个记录批次里(Segment),这个批次

2021-04-22 23:27:46 394

原创 Mysql 事务隔离级别和锁的关系

我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析 MySQL中 InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。一、一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些

2021-04-22 23:01:48 35

原创 Mysql 备份方案

一、为什么要备份【1】容灾恢复:硬件故障、不经意的 Bug 导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用等(例如:机房大楼烧毁,恶意的黑客攻击或 Mysql 的 Bug 等)。【2】人们改变想法:很多人经常会在删除某些数据后,又想恢复这些数据。【3】审计:有时需要知道数据或 Schema 在过去的某个时间点的状态和数据,或发现了应用的一个 Bug,想知道在此之前发生了什么等等。【4】测试:定期使用生产数据来更新测试服务器(备份是为了恢复,这样也可以验证备份的数据是否完整,是否能够

2021-04-22 22:58:02 30

原创 MySQL 慢查询优化案例

一、慢查询优化基本步骤【1】先运行看看是否真的很慢,注意设置SQL_NO_CACHE(查询时不使用缓存);【2】where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的 where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高;【3】explain查看执行计划,是否与2预期一致(从锁定记录较少的表开始查询);【4】order by limit 形式的 sql语句让排序的表优先查;【5】了解业务方使用场景;【6】加索引时参照建索引的几大原则;

2021-04-22 22:53:54 48

原创 磁盘IO 基本常识

计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD(固态硬盘)硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的 I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计?针对这些问题,本文将介绍硬盘的物理结构和性能指标,以及操作系统针对磁盘性能所做的优化,最后讨论下

2021-04-22 22:44:10 724

原创 MySQL 更新执行的过程

Select语句的执行过程会经过连接器、分析器、优化器、执行器、存储引擎,同样的 Update语句也会同样走一遍 Select语句的执行过程。但是和 Select最大不同的是,Update语句会涉及到两个日志的操作 redo log(重做日志) 和 binlog (归档日志)。那么 Mysql中又是怎么使用 redo log和 binlog?为什么要使用 redo log和 binlog呢?直接执行更新然后存库不就行了吗?还要放在 redo log和 binlog中,这不是多此一举吗?且听我慢慢

2021-04-22 22:41:23 89

原创 Mysql SQL优化

Mysql 查询执行的过程链接一、索引的代价我们虽然可以根据我们的喜好在不同的列上建立索引,但是建立索引是有代价的,所以不要建太多的索引:【1】空间上的代价:每建立一个索引都要为它建立一棵 B+树,每一棵 B+树的每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,一棵很大的 B+树由许多数据页组成,可想而知会占多少存储空间了。【2】时间上的代价:每次对表中的数据进行增、删、改操作时,都需要去修改各个 B+树索引。在B+树上每层节点都是按照索引列的值从小到大的顺序排序而组成了双向链表。.

2021-04-21 23:56:06 127

原创 MySQL 查询性能优化

如果把查询看作是一个任务,那么它由一些列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数。通常来说,查询的生命周期大致可以按照顺序来看:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中“执行”可以认为是整个生命周期中最重要的阶段,其中包括大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序、分组等。上述操作会在网络、CPU计算、生成统计信息和执行计划、锁等待(互斥等待)等操作上花费

2021-04-21 23:23:37 41

原创 MySQL 锁机制

定义:锁是计算机协调多个进程或线程并发访问某一资源的机制。一、表锁(偏读)MyISAM 引擎,开销小,加锁快,无死锁、锁定粒度大、发生锁冲突的粒度最高,并发度低。【1】手动增加表锁:lock table 表名1 read(write),表名2 read(write),其他;【2】查看那些表加锁:show open tables;【3】释放表:unlock tables,也可以在客户端断开的时候自动释放;【结论】:当 session1 对 my_lock 表加了 read 表锁后...

2021-04-21 23:17:10 196

原创 面试经验之谈

通常面试官会把每一轮面试分为三个环节:① 行为面试 ② 技术面试 ③ 应聘者提问行为面试环节面试开始的5~10分钟通常是行为面试的时间,面试官会参照简历和你的自我介绍了解应聘者的过往经验和项目经历。由于面试官手里拿着应聘者的简历,里面有应聘者的详细信息,因此此时的自我不用花费很多时间,用30秒到1分钟的时间介绍自己的主要学习知识和工作经历即可。如果面试官对你的某一段经历或者参与的某一个项目感兴趣,那么他会有针对性地提几个问题详细了解。应聘者项目经验自我介绍完之后,面试官会一般会对照简历详细了

2021-04-21 23:06:36 78

原创 Spring 注解整理

一、核心容器【1】@Configuration:告诉 Spring 这是一个配置类(配置类=配置文件)【2】@Bean:给容器中注册一个 Bean ;类型为返回值类型,id 默认是用方法名作为 id 也可以通过 value 属性添加 id(相当于 xml 中的 <bean> 标签),主要用于导入第三方包里面的组件。【3】@ComponentScan:包扫描,只要标注了 @Cotroller、@Service、@Repository、@Componet 等注解便会自动注入此类,exclud

2021-04-21 23:06:25 8

原创 网站故障案例总结

一、写日志引发故障【故障现象】:应用服务集群发布后不久就出现多台服务器相继报警,硬盘可用空间低于警戒值,并且很快有服务器宕机。登录在线上服务器,发现 log 文件夹里面的文件迅速增加,不断消耗磁盘空间。【原因分析】:这是一个普通的应用服务器集群,不需要存储数据,因此服务器使用的是一块 100GB 的小硬盘,安装完操作系统、Web 服务器、Java 虚拟机、应用程序后,空闲空间就剩几十GB,正常情况下这些磁盘的空间足够,但是该应用的开发人员将 log输出的 level全局配置为 Debug。这样一次简单

2021-04-21 23:06:11 51

原创 Java面试——SQL语句题

一、行转列问题现有表格A,按照以下格式排列;姓名 收入类型 收入金额 Tom 年奖金 5w Tom 月工资 10k Jack 年奖金 8w Jack 月工资 12k 先需要将表格转化为:姓名 月工资 年奖金 Tom 10k 50k Jack 12k 80k 方法一:使用静态SQLselect '姓名',sum(case '收入类型' when '年奖金' the

2021-04-20 12:44:32 90

原创 注解式事务解决方案

一、添加事务配置文件:applicationContext-tx.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

2021-04-20 12:43:55 48

原创 订单付款倒计时实现方案

当使用 12306 抢票成功后,就会进入付款界面,这个时候就会出现一个订单倒计时,下面我们就对付款倒计时的功能实现,进行深入学习和介绍,界面展示如下:如何实现付款及时呢,首先用户下单后,存储用户的下单时间。下面介绍四种系统自动取消订单的方案:一、DelayQueue 延时无界阻塞队列我们的第一反应是用 数据库轮序+任务调度 来实现此功能。但这种高效率的延迟任务用任务调度(定时器)实现就得不偿失。而且对系统也是一种压力且数据库消耗极大。因此我们使用 Java 延迟队列 DelayQueue ..

2021-04-20 12:42:32 1014

原创 Spring IOC——源码分析

Spring 容器的 refresh() 创建容器//下面每一个方法都会单独提出来进行分析@Overridepublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 刷新前的预处理 prepareRefresh(); // 获取 Bean工厂,默认的 DefaultListableBe

2021-04-20 12:42:13 36

原创 Spring 的核心组件详解

Spring 总共有十几个组件,但是真正核心的组件只有三个:Core、Context 和 Bean。它们构建起了整个 Spring的骨骼架构,没有它们就不可能有 AOP、Web 等上层的特性功能。一、Spring的设计理念Bean组件是 Spring核心中的重点,Spring 就是面向Bean编程的(Bean Oriented Programming:BOP)就像Object 对OOP的意义一样,没有对象的概念就像没有面向对象的编程,在Spring中没有Bean也就没有Spring存在的意义。我.

2021-04-20 12:32:27 81

原创 MySQL 索引的分类和优化

索引有很多种类型,为不同的场景提供更好的性能。在MySQL中,索引是在存储引擎层而不是服务器层实现。不同存储引擎的索引其工作方式并不一样。也不是所有存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引,其底层实现也可能不同。一、B-Tree 索引我们通过提到索引时,多半说的都是 B-Tree 索引,使用 B-Tree 数据结构来存储数据。大多数 MySQL 引擎都支持这种索引。之所以称之为“B-Tree” 是因为 MySQL 在创建表和其他语句中也使用该关键字。不过,底层的存储引擎也可

2021-04-19 12:55:41 87

原创 Java面试——Redis

一、Redis 为什么那么快【1】完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中。【2】数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的。【3】采用单线程,避免不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。【4】使用多路IO复用模型,非阻塞IO。利用epoll可以同时监察多个流的 IO事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或

2021-04-18 22:27:28 155

原创 MySQL 查询执行的过程

查询的生命周期大致可以按照顺序来看:从客户端到服务端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中 “执行” 可以认为是整个生命周期中最重要的阶段,其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序分组等。当希望 MySQL 能够以高性能的方式运行查询时,最好的办法就是弄清楚 MySQL 是如何优化和执行查询的。MySQL 执行一个查询的过程,如下:开始执行这条sql时,首先会校验你的用户名和密码是否正确,若是不正确会返回错误信息:"Access deni

2021-04-18 22:24:26 194 1

原创 Java面试——阻塞队列

一、阻塞队列【1】首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:二、架构分析【1】阻塞队列的架构图:阻塞队列与 List 具有很多类似之处,对比着学习会更加容易一些。【2】阻塞队列重点子类说明: ■ ArrayBlockingQueue:由数组结构组成的有界阻塞队列。 ■ LinkedBlockingQueue:由链表结构组成的有界(大小默认值为 Integer.MAX_VALUE <21亿左右,相当于无界>)阻塞队列。 ■ ...

2021-04-18 14:13:23 238 2

pagination.css

pagination.css 由于前端分页时配合pagination.js使用。

2018-09-02

企业人事管理论文+源代码

本篇论文使用了Swing、Hibernate、Oracle等技术,设计了一个功能全面、操作简单,可以快速的为员工建立电子档案,并且便于修改、保存和查看,实现了无纸化存档,为企业节省了大量的资金和空间。通过企业人事管理系统,还可以实现对企业员工的考勤管理、奖罚管理、培训管理、待遇管理和快速生成待遇报表。

2016-11-27

FastDFSClient配置文件

fastDFS配置文件,主要修改其中的Service就可以了,其他可默认。

2018-09-20

MyBatis逆向工程生成工具

通过数据库逆向生成MyBatis需要的pojo、interface和xml文件

2018-05-13

java 高级开发 zzx博客链接.xmind

自己高级学习脑图,希望能够帮助到更多迷茫中的同行们。主要对当前非常流程的知识点和框架内容进行整理。重点是只需要1积分,纯粹的免费送呀。

2020-04-06

ojdbc14-10.2.0.4.0.jar包

由于微软的数据库不是用Java语言来编写的,但是我们需要用java语言连接微软的数据库,这样就要编写一个桥连接,使java语言编写的代码也可以操作数据库。

2017-03-27

ojdbc14-10.2.0.4.0.jar

2017-03-26

不想做CTO的程序员不是一个好的架构师

发表于 2020-11-06 最后回复 2020-11-06

IDEA 中使用properties配置文件 乱码问题

发表于 2018-10-31 最后回复 2018-10-31

CSDN 403错误

发表于 2018-10-16 最后回复 2018-10-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除