自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(655)
  • 资源 (3)
  • 论坛 (2)
  • 问答 (1)
  • 收藏
  • 关注

转载 MySQL解惑——GROUP BY隐式排序

MySQL中GROUP BY隐式排序是什么概念呢? 主要是其它RDBMS没有这样的概念,如果没有认真了解过概念,对这个概念会感觉有点困惑,我们先来看看官方文档的介绍:官方文档MySQL 5.7 Reference Manual中的“.2.1.14 ORDER BY Optimization”章节有如下介绍:GROUP BY implicitly sorts by default (that is, in the absence of ASC or DESC designators for GROUP

2021-10-10 13:46:03 7

转载 MySQL Online DDL ALGORITHM区别

导读:MySQL的Online DDL长期饱受诟病,8.0之后有没有好一些呢…本文重点讨论常见的几种Online DDL需求:增加新列(ADD COLUMN)修改列定义(MODIFY COLUMN)增加/删除索引(ADD/DROP INDEX)其他的DDL操作相对比较少,所以本文就不讨论了。此外,本文也不讨论非InnoDB引擎以及非普通索引(如全文索引、空间索引)的场景。我们先看下ALTER TABLE时ALGORITHM可以指定的几种方式:COPY ,是指DDL时,会生成(临时)新表

2021-09-30 12:51:41 17

转载 控制bash脚本

处理信号Linux利用信号与运行在系统中的进程进行通信。可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。重温 Linux 信号Linux系统和应用程序可以生成超过30个信号。表16-1列出了在Linux编程时会遇到的最常见的Linux系统信号。表16-1 Linux信号信 号值描 述1SIGHUP挂起进程2SIGINT终止进程3SIGQUIT停止进程9SIGKILL无条件终止进程15SIGTER

2021-09-12 16:10:56 231

转载 使用Bash呈现数据

理解输入和输出至此你已经知道了两种显示脚本输出的方法: 在显示器屏幕上显示输出 将输出重定向到文件中这两种方法要么将数据输出全部显示,要么什么都不显示。但有时将一部分数据在显示器上显示,另一部分数据保存到文件中也是不错的。对此,了解Linux如何处理输入输出能够帮助你就能将脚本输出放到正确位置。标准文件描述符Linux系统将每个对象当作文件处理。这包括输入和输出进程。 Linux用文件描述符(file descriptor) 来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打

2021-08-22 18:36:27 23

转载 处理用户输入

命令行参数向shell脚本传递数据的最基本方法是使用命令行参数。命令行参数允许在运行脚本时向命令行添加数据。$ ./addem 10 30本例向脚本addem传递了两个命令行参数(10和30)。脚本会通过特殊的变量来处理命令行参数。读取参数bash shell会将一些称为位置参数(positional parameter)的特殊变量分配给输入到命令行中的所有参数。这也包括shell所执行的脚本名称。位置参数变量是标准的数字:$0是程序名,$1是第一个参数, $2是第二个参数,依次类推,直到第九个

2021-08-19 00:06:25 25

转载 循环嵌套命令

for 命令bash shell提供了for命令,允许你创建一个遍历一系列值的循环。每次迭代都使用其中一个值来执行已定义好的一组命令。下面是bash shell中for命令的基本格式。for var in listdo commandsdone在list参数中,你需要提供迭代中要用到的一系列值。可以通过几种不同的方法指定列表中的值。在每次迭代中,变量var会包含列表中的当前值。第一次迭代会使用列表中的第一个值,第二次迭代使用第二个值,以此类推,直到列表中的所有值都过一遍。在do和done语

2021-08-15 17:32:09 27

转载 使用结构化命令

使用 if-then 语句最基本的结构化命令就是if-then语句。 if-then语句有如下格式。if commandthencommandsfi如果你在用其他编程语言的if-then语句,这种形式可能会让你有点困惑。在其他编程语言中, if语句之后的对象是一个等式,这个等式的求值结果为TRUE或FALSE。但bash shell的if语句并不是这么做的。bash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。

2021-08-13 00:09:29 19

转载 构建基本脚本

使用多个命令shell脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果传给另一个命令。 shell可以让你将多个命令串起来,一次执行完成。如果要两个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开。$ date ; who使用这种办法就能将任意多个命令串连在一起使用了,只要不超过最大命令行字符数255就行。创建 shell 脚本文件在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其格式为:#!/bin/bash在通常的shell脚本中,井

2021-08-12 00:52:02 25

转载 使用编辑器

vim 编辑器在GNU项目将vi编辑器移植到开源世界时,他们决定对其作一些改进。由于它不再是以前Unix中的那个原始的vi编辑器了,开发人员也就将它重命名为vi improved,或vim。检查 vim 软件包在开始研究vim编辑器之前,最好先搞明白你所用的Linux系统是哪种vim软件包。在有些发行版中安装的是完整的vim, 另外还有一个vi命令的别名,就像下面所显示的CentOS发行版中的那样。$ alias vialias vi='vim'$$ which vim/usr/bin/vi

2021-08-10 23:55:07 23

转载 安装软件程序

包管理基础在深入了解Linux软件包管理之前,本章将先介绍一些基础知识。各种主流Linux发行版都采用了某种形式的包管理系统来控制软件和库的安装。 PMS利用一个数据库来记录各种相关内容: Linux系统上已安装了什么软件包; 每个包安装了什么文件; 每个已安装软件包的版本。软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库( repository)。可以用PMS工具来搜索新的软件包,或者是更新系统上已安装软件包。软件包通常会依赖其他的包,为了

2021-08-09 00:00:33 30

转载 管理文件系统

Linux 文件系统Linux的文件系统为我们在硬盘中存储的0和1和应用中使用的文件与目录之间搭建起了一座桥梁。Linux支持多种类型的文件系统管理文件和目录。每种文件系统都在存储设备上实现了虚拟目录结构,仅特性略有不同。基本的 Linux 文件系统Linux最初采用的是一种简单的文件系统,它模仿了Unix文件系统的功能。ext文件系统Linux操作系统中引入的最早的文件系统叫作扩展文件系统( extended filesystem,简记为ext)。它为Linux提供了一个基本的类Unix文件系

2021-08-08 22:54:55 30

转载 Linux文件权限

Linux 的安全性每个能进入Linux系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于他们登录系统时用的账户。用户权限是通过创建用户时分配的用户ID( User ID,通常缩写为UID)来跟踪的。 UID是数值,每个用户都有唯一的UID,但在登录系统时用的不是UID,而是登录名。登录名是用户用来登录系统的最长八字符的字符串(字符可以是数字或字母),同时会关联一个对应的密码。/etc/passwd 文件Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。这个文

2021-08-08 17:03:41 22

转载 Linux环境变量

什么是环境变量bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原因)。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。这也是存储持久数据的一种简便方法。在bash shell中,环境变量分为两类: 全局变量 局部变量全局环境变量全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的shell可见。这让全局环境变量对

2021-08-01 16:36:23 28

转载 理解shell

shell 的父子关系用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell。在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序。这个shell程序被称为子shell(child shell)。子shell也拥有CLI提示符,同样会等待命令输入。当输入bash、生成子shell的时候,你是看不到任何相关的信息的,因此需要另一条命令帮助我们理清这一切。ps命令能够派上用场,在生成子shell的前后配合选项-

2021-07-31 23:13:12 22

转载 基本的bash shell命令

bash手册man命令用来访问存储在Linux系统上的手册页面。在想要查找的工具的名称前面输入man命令就可以找到那个工具相应的手册条目。当使用man命令查看手册时,手册是由分页程序来显示的,使用空格键翻页或使用回车键逐行查看,q建退出。输入man man来查看与手册也相关的手册页。手册页将与命令相关的信息分成了不同的节。每一节惯用的命名标准如表3-1所示。节描 述Name显示命令名和一段简短的描述Synopsis命令的语法Configuration命令配置信息

2021-07-31 20:57:08 36

转载 Spring应用上下文周期

Spring应用上下文启动准备阶段Abstract ApplicationContext#prepare Refresh() 方法启动时间-startupDate状态标识-closed(false) 、active(true)初始化PropertySources-initPropertySources()检验Environment中必须属性初始化事件监听器集合初始化早期Spring事件集合BeanFactory创建阶段AbstractApplicationContext#obt

2021-06-10 00:00:09 42

转载 Spring Environment抽象

理解Spring Environment抽象统一的配置属性管理Spring Framework3.1开始引入Environment抽象,它统一Spring配置属性的存储,包括占位符处理和类型转换,不仅完整地替换PropertyPlaceholderConfigurer,而且还支持更丰富的配置属性源(PropertySource)条件化Spring Bean装配管理通过Environment Profiles信息,帮助Spring容器提供条件化地装配BeanSpring Environmen

2021-06-09 00:35:48 47

转载 【Java基础】Spliterator

Spliterator接口是1.8新加的不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素。字面意思可分割的迭代器,不同以往的iterator需要顺序迭代,Spliterator可以分割为若干个小的迭代器进行并行操作,既可以实现多线程操作提高效率,又可以避免普通迭代器的fail-fast机制所带来的异常。Spliterator可以配合1.8新加的Stream进行并行流的实现,大大提高处理效率。我们先看Spliterator接口的几个方法,然后

2021-06-06 15:27:09 30

原创 Spring Boot应用退出

每个SpringApplication都向JVM注册一个关闭钩子,以确保ApplicationContext在退出时优雅地关闭。所有标准的Spring生命周期回调(比如DisposableBean接口或@PreDestroy注释)都可以使用。此外,如果bean希望在调用SpringApplication.exit()时返回特定的退出代码,则可以实现org.springframework.boot.ExitCodeGenerator接口。然后可以将此退出代码传递给System.exit(),将其作为状态代码

2021-06-06 14:16:32 144 2

原创 SpringApplication结束阶段

1、SpringApplication正常结束Spring Boot2.0为SpringApplication正常结束新引入了SpringApplicationRunListener的生命周期,即running(ConfigurableApplicationContext),该方法在Spring应用上下文中已准备,并且CommandLineRunner和ApplicationRunner Bean均已执行完毕。EventPublishingRunListener作为Spring ApplicationRu

2021-06-02 22:38:30 51 4

转载 Binlog中的时间戳

小编说:本文从一个典型的案例入手来讲述Binlog中时间戳的原理和实践,通过本文你可以了解时间戳在Binlog中的作用及产生方法,以便在出现一些这方面怪异的问题时,做到心中有数,胸有成竹。本文选自《MySQL运维内参》背景众所周知,在Binlog文件中,经常会看到关于事件的时间属性,出现的方式都是如下这样的。#161213 10:11:35 server id 11766 end_log_pos 263690453 CRC32 0xbee3aaf5 Xid = 83631678我们清楚地知道,1

2021-05-30 17:52:48 62

原创 SpringApplication运行阶段

SpringApplication运行阶段围绕run(String …)方法展开,该过程结合初始化阶段完成的状态进一步完善了运行时所需要准备的资源,随后启动Spring应用上下文,在此期间伴随Spring Boot和Spring事件的触发,形成完整的SpringApplication生命周期:SpringApplication准备阶段SpringApplication启动阶段SpringApplication启动后阶段1、SpringApplication准备阶段本阶段涉及的范围从run(St

2021-05-29 16:35:59 1502

原创 SpringApplication初始化阶段

在Spring Framework时代,Spring应用上下文通常由容器启动,如ContextLoaderListener或WebApplicationInitializer的实现类由Servlet容器装载并驱动。到了Spring Boot时代,Spring应用上下文的启动则通过调用SpringApplication.run(Object,String …)或SpringApplicationBuilder.run(String …)方法并配合@SpringBootApplication或@EnableAu

2021-05-17 00:02:07 2876

原创 Spring Boot条件化自动装配

标准@Configuration类是自动装配的底层实现,并且搭配Spring Framework @Conditional注解,使其能合理地在不同环境中运作。在《SpringBoot自动装配》中讨论过,@EnableAutoConfiguration利用AutoConfigurationImportFilter实现类OnClassCondition等过滤非法自动装配Class,从而间接地接触条件注解@ConditionalOnClass。条件注解@ConditionalOnClass采用元标注@Cond

2021-05-10 00:22:05 3109

转载 架构师之路,20年干货精选

今天,给大家做一个分类精选,选取21月31之前发布的,阅读大于1W+的60篇,大家点击标题,直接阅读。如果之前有错过的文章,这是一个很好的补课机会。架构原理:《互联网分层架构的本质》1.5W+《互联网分层架构,为啥要前后端分离?》1.4W+《业务层,到底需不需要服务化?》1W+《Google的锁,才是分布式锁?》1.8W+《MySQL双主架构,原来能这么玩》1.3W+《七夕之夜,如何保证私密信息不泄露?》1.2W+《框架组件,究竟要不要自研?》1.3W+架构实践:《究竟如何保证,sess

2021-05-08 01:47:11 56

转载 自定义Spring Boot自动装配

通常开发人员将通用的逻辑打包到独立JAR文件中,供上层应用使用,不同的运行环境或框架有其独特的SPI机制,作为通用框架的Spring Boot也不例外,当注解@EnableAutoConfiguration激活自动装配后,META/spring.factories资源中声明的@Configuration类随即被装配。从底层来讲,自动配置(auto-configuration)是通过标准的@Configuration类实现的。此外,@Conditional注解用来约束自动配置生效的条件。通常自动配置类需要使

2021-05-08 00:55:07 34

转载 深入理解堆外内存 Metaspace

在之前介绍的分代垃圾回收算法中,我们一直有一个永久代存在,叫 PermGen,内存上它是挨着堆的。为了垃圾回收方便,HotSpot 在永久代上一直是使用老年代的垃圾回收算法。永久代主要存放以下数据:JVM internal representation of classes and their metadataClass staticsInterned strings从 JDK7 开始,JDK 开发者们就有消灭永久代的打算了。有部分数据移到永久代之外了:Symbols => nati

2021-04-24 22:05:10 298

转载 什么是零拷贝

平时在面试中你肯定会经常碰见的问题就是:RocketMQ为什么快?Kafka为什么快?什么是mmap?这一类的问题都逃不过的一个点就是零拷贝,虽然还有一些其他的原因,但是今天我们的话题主要就是零拷贝。传统IO在开始谈零拷贝之前,首先要对传统的IO方式有一个概念。基于传统的IO方式,底层实际上通过调用read()和write()来实现。通过read()把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区;然后再通过write()写入到socket缓冲区,最后写入网卡设备。整个过程发生了4次用户态和内

2021-04-06 16:39:12 78

原创 SpringBoot自动装配

在使用Spring Framework时,当@Component或@Configuration Class需要被配置时,应用需要借助@Import或@ComponentScan的能力,由于应用依赖JAR存在变化的可能,因此其中的@Component类所在的包路径也随之不确定,如果要实现当前应用所有组件自动装配,则@Import显然是无能为力的,开发人员自然会想到使用@ComponentScan扫描应用默认包路径,理论上默认包及其子包下的所有@Component类均会被@ComponentScan注册为Spr

2021-04-02 15:54:03 4191

原创 最长的回文子串

题目给你一个字符串 s,找到 s 中最长的回文子串。示例示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”实现暴力解法class Solution { public static void main(String[] args) { String res = longe

2021-03-11 23:40:21 200

原创 生成N对括号所有可能的有效括号组合

题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]思路核心是必须要先有一个左括号才能给字符串添加括号,且无论何时右括号的个数一定要小于等于左括号的个数。实现import java.util.ArrayList;import java.util.List;class

2021-03-11 22:28:00 388

转载 Spring是如何解决循环依赖的

1.由同事抛的一个问题开始最近项目组的一个同事遇到了一个问题,问我的意见,一下子引起的我的兴趣,因为这个问题我也是第一次遇到。平时自认为对spring循环依赖问题还是比较了解的,直到遇到这个和后面的几个问题后,重新刷新了我的认识。我们先看看当时出问题的代码片段:@Servicepublicclass TestService1 { @Autowired private TestService2 testService2; @Async public void tes

2021-03-07 15:26:26 238

转载 查找Java程序CPU高负荷步骤

步骤一:找到最耗CPU的进程top -c键入P(大写),进程按照CPU使用率排序步骤二:找到最耗CPU的线程top -Hp pid 显示一个进程的线程运行信息列表键入P(大写),线程按照CPU使用率排序步骤三:将线程PID转化为16进制(应为线程堆栈里,线程id使用16进制表示的)pringf “%x\n” pid步骤四: 查看堆栈,找到线程在干嘛jstack pid | grep ‘16进制的数字’ -c5 --color找到了耗CPU搞的线程对应的线程名称,看到了该线程正在执行的堆栈

2021-03-05 17:05:18 42

转载 mysql insert 加锁流程

INSERT sets an exclusive lock on the inserted row. This lock is an index-record lock, not a next-key lock (that is, there is no gap lock) and does not prevent other sessions from inserting into the gap before the inserted row.insert 会对插入成功的行加上排他锁。这个锁不是索引记

2021-03-01 12:14:31 120

原创 数字金额转中文大写金额

public static String transAmount2Chinese(long amount) { //每4位一组,每一组多一位分隔符splits String[] unit = {"", "拾", "佰", "仟"}; //个、十、百、千、万、十万、百万、千万、亿、十亿、百亿、千亿 、兆、十兆、百兆、千兆、 //京、十京、百京、千京、垓、十垓、百垓、千垓、秭、十秭、百秭、千秭、穰、十穰、百穰、千穰、沟、十沟、百沟... String[] splits =

2021-02-24 00:45:27 1416

原创 偏向锁、轻量级锁、重量级锁解析

Java 对象头在32位虚拟机和64位虚拟机的 Mark Word 所占用的字节大小不一样,32位虚拟机的 Mark Word 和 class Pointer 分别占用 32bits 的字节,而 64位虚拟机的 Mark Word 和 class Pointer 占用了64bits 的字节,下面我们以 32位虚拟机为例,来看一下其 Mark Word 的字节具体是如何分配的32位虚拟机64位虚拟机偏向锁、轻量级锁的状态转化及对象Mark Word的关系偏向锁的获得和撤销流程时序图流程图

2021-02-19 21:39:56 4566 6

转载 Kafka高级应用

除了正常的消息发送和消费, 在使用Kafka的过程中难免会遇到一些其他高级应用类的需求, 比如消费回溯, 这个可以通过原生Kafka提供的Kafka Consumer.seek() 方法来实现, 然而类似延时队列、消息轨迹等应用需求在原生Kafka中就没有提供了。我们在使用其他消息中间件时, 比如Rabbit MQ,使用到了延时队列、消息轨迹的功能, 如果我们将应用直接切换到Kafka中, 那么只能选择舍弃它们。但这也不是绝对的, 我们可以通过一定的手段来扩展Kafka, 本章讲述的就是如何实现这类扩展的高

2021-02-03 16:32:43 222

转载 Kafka 监控

任何应用功能再强大、性能再优越,如果没有与之匹配的监控,那么一切都是虚无缥缈的。监控不仅可以为应用提供运行时的数据作为依据参考,还可以迅速定位问题,提供预防及告警等功能, 很大程度上增强了整体服务的鲁棒性。目前的Kafka监控产品有很多, 比如Kafka Manager、Kafka Eagle、Kafka Monitor、Kafka Offset Monitor、Kafka Web Console、Burrow等,它们都有各自的优缺点。以Kafka Manager为例, 它提供的监控功能也是相对比较完善的,

2021-01-31 22:17:18 113

转载 Kafka 应用

1、命令行工具Kafka 中提供了许多命令行工具(位于$KAFKA_HOME/bin 目录下)用于管理集群的变更。脚本名称释义kafka-configs.sh用于配置管理,在4.1.5节和4.3.3节中有所提及kafka-console-consumer.sh用于消费消息,在1.3节和7.3节中有所提及kafka-console-producer.sh用于生产消息,在1.3节中有所提及kafka-consumer-perf-test.sh用于测试消费性能,在

2021-01-31 21:25:37 79

原创 MySQL常用命令

MySQL视图相关创建视图mysql> create view v_t as select * from t where id<10;视图定义中的 WITH CHECK OPTION就是针对于可更新的视图的,即更新的值是否需要检查mysql> alter view v_t as select * from t where id<10 with check option;SHOW TABLES命令把表和视图都显示出来mysql> show tables;若用

2021-01-31 14:06:03 66

java编程思想第四版(含源码和课后答案)pdf

java编程思想第四版pdf包括源码和课后答案

2012-03-03

html5帮助文档

很好的html5帮助文档, 值得拥有。

2012-06-14

css2.0cmh文档

内容比较全,讲解比较到位,很适合下载使用

2012-03-19

一直不懂的留言板

发表于 2020-01-02 最后回复 2020-01-02

正则表达式

发表于 2014-01-09 最后回复 2014-01-12

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

TA关注的人 TA的粉丝

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