自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(668)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

转载 明明加了唯一索引,为什么还是产生重复数据?

前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。到底怎么回事呢?本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。

2022-09-24 15:58:06 53

转载 bash正则表达式

Linux中的不同应用程序可能会用不同类型的正则表达式。这其中包括编程语言(Java、 Perl和Python)、 Linux实用工具(比如sed编辑器、 gawk程序和grep工具)以及主流应用(比如MySQL和PostgreSQL数据库服务器)。正则表达式是通过正则表达式引擎(regular expression engine)实现的。正则表达式引擎是一套底层软件,负责解释正则表达式模式并使用这些模式进行文本匹配。在Linux中,有两种流行的正则表达式引擎: POSIX基础正则表达式( basi

2022-07-03 22:05:19 500

转载 初识sed和gawk

Linux系统提供了两个常见的具备上述功能的工具。本节将会介绍Linux世界中最广泛使用的两个命令行编辑器: sed和gawk。sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 sed编辑器会执行下列操

2022-07-03 21:29:22 84

转载 图形化桌面环境中的脚本编程

创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户了解脚本能做什么和不能做什么。通常菜单脚本会清空显示区域,然后显示可用的选项列表。用户可以按下与每个选项关联的字母或数字来选择选项。shell脚本菜单的核心是case命令。 case命令会根据用户在菜单上的选择来执行特定命令。后面几节将会带你逐步了解创建基于菜单的shell脚本的步骤。创建菜单的第一步显然是决定在菜单上显示哪些元素以及想要显示的布局方式。在创建菜单前,通常要先清空显示器上已有的内容。这样就能在干净的、没有干扰

2022-06-23 23:43:55 315

转载 创建Bash函数

有两种格式可以用来在bash shell脚本中创建函数。第一种格式采用关键字function,后跟分配给该代码块的函数名。name属性定义了赋予函数的唯一名称。脚本中定义的每个函数都必须有一个唯一的名称。commands是构成函数的一条或多条bash shell命令。在调用该函数时, bash shell会按命令在函数中出现的顺序依次执行,就像在普通脚本中一样。在bash shell脚本中定义函数的第二种格式更接近于其他编程语言中定义函数的方式。函数名后的空括号表明正在定义的是一个函数。这种格式的命

2022-06-16 00:05:40 187

转载 【排序】图解桶排序

一、思想一句话总结:划分多个范围相同的区间,每个子区间自排序,最后合并。桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效。二、图解过程三、核心代码public static void bucketSort(int[] arr){ /

2022-03-20 15:10:25 112

转载 一文弄懂计数排序算法

01 计数排序算法概念计数排序不是一个比较排序算法,该算法于1954年由 Harold H. Seward提出,通过计数将时间复杂度降到了O(N)。02 基础版算法步骤第一步:找出原数组中元素值最大的,记为max。第二步:创建一个新数组count,其长度是max加1,其元素默认值都为0。第三步:遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。第四步:创建结果数组result,起始索引index。第五步:遍历count数组,找出其

2022-03-20 15:07:25 97

原创 常用网址收藏

macwk(mac破解版软件alfred)程序猿DD日拱一兵日拱一兵Github迅捷PDF转换javadoopLinux命令搜索java常用工具PhantomThief

2022-03-20 14:57:36 378

转载 架构师之路21年文章精选

这几篇,首先推荐大家读一读:《我们从来都反对“大中台,小前台”的架构设计!》2.1W+《关于MySQL,这篇都没人赞,太没天理了!》1.3W+《关于MySQL异步复制,MGR内核原理!》《求解“微信群覆盖”的三种方法:暴力,染色,链表,并查集》关于底层内核的文章,似乎阅读越来越低了。今年花在开源学习上的时间并不多:《1万行代码,单机50万QPS,今年最值得学习的开源RPC框架!》2.3W+《开源微服务API网关,单核2万QPS,今年最值得学习的开源项目》2W+大家今年阅读开源代码了吗?数

2022-02-17 15:49:41 145

转载 InnoDB一棵B+树可以存放多少行数据?

一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是4k,而对于我们的InnoDB存储引擎也有自己的最小储存单元——页(Page),一个页

2022-01-18 23:31:49 92

转载 深入详解ThreadLocal内存泄漏问题

1. 造成内存泄漏的原因?threadLocal是为了解决对象不能被多线程共享访问的问题,通过threadLocal.set方法将对象实例保存在每个线程自己所拥有的threadLocalMap中,这样每个线程使用自己的对象实例,彼此不会影响达到隔离的作用,从而就解决了对象在被共享访问带来线程安全问题。如果将同步机制和threadLocal做一个横向比较的话,同步机制就是通过控制线程访问共享对象的顺序,而threadLocal就是为每一个线程分配一个该对象,各用各的互不影响。打个比方说,现在有100个同学需

2022-01-13 11:50:24 1398 1

转载 围观了张一鸣近10年的发文,我整理了这几条建议

这几天抽空把张一鸣的所有围脖看了一遍,发现2010年的最好,就是他30岁左右的时候,那时候刚创业没多久,认真分享自己的思考和观点。到了2012年附近,开始做某头条,每天都是大量转发某头条上的文章到某博,干货变少了。后面就更新得越来越少。我从他的某博中,试图找到他成功的钥匙,得到了一些只言片语,但是仅仅是这些只言片语,我都觉得对我的启发很大。他从南开大学毕业,妻子是大学同学,毕业后去过微软,后来从微软离职,然后去过饭否,应该跟过王兴王慧文一阵子,后来还是自己创业。刚开始项目是某房,类似于某居客或者某壳

2022-01-12 17:53:26 111

转载 Guava常用工具

1. 基本工具1.1 使用和避免nullGuava用Optional<T>表示可能为null的T类型引用。一个Optional实例可能包含非null的引用,也可能什么也不包括。它从不说包含的是null值,而是用存在或缺失来表示。但Optional从不会包含null值引用。Optional<Integer> possible = Optional.of(5);possible.isPresent(); // returns truepossible.get(); //

2021-11-28 17:00:02 633

转载 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 225

转载 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 427

转载 控制bash脚本

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

2021-09-12 16:10:56 396

转载 使用Bash呈现数据

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

2021-08-22 18:36:27 147

转载 处理用户输入

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

2021-08-19 00:06:25 101

转载 循环嵌套命令

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

2021-08-15 17:32:09 506

转载 使用结构化命令

使用 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 74

转载 构建基本脚本

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

2021-08-12 00:52:02 206

转载 使用编辑器

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 74

转载 安装软件程序

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

2021-08-09 00:00:33 381

转载 管理文件系统

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

2021-08-08 22:54:55 165

转载 Linux文件权限

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

2021-08-08 17:03:41 700

转载 Linux环境变量

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

2021-08-01 16:36:23 324

转载 理解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 49

转载 基本的bash shell命令

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

2021-07-31 20:57:08 367

转载 Spring应用上下文周期

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

2021-06-10 00:00:09 84

转载 Spring Environment抽象

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

2021-06-09 00:35:48 121

转载 【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 1042

原创 Spring Boot应用退出

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

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

原创 SpringApplication结束阶段

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

2021-06-02 22:38:30 229 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 675

原创 SpringApplication运行阶段

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

2021-05-29 16:35:59 1625

原创 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 3051

原创 Spring Boot条件化自动装配

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

2021-05-10 00:22:05 3251

转载 架构师之路,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 134

转载 自定义Spring Boot自动装配

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

2021-05-08 00:55:07 304

转载 深入理解堆外内存 Metaspace

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

2021-04-24 22:05:10 6832

html5帮助文档

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

2012-06-14

css2.0cmh文档

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

2012-03-19

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

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

2012-03-03

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

TA关注的人

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