![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
知识分享
玄同66
风萧萧兮易水寒,壮士一去兮怎么还?
展开
-
全网最全JavaScript正则表达式( 校验数字和字母)
<script type="text/javascript"> function doCheck() { var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; var v = document.getElementById("txt").value; if (!reg.test(v)) { alert("请输原创 2021-01-14 13:59:55 · 24632 阅读 · 2 评论 -
VM options常用设置
Java VM 常用设置记录-Xms256m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=512m原创 2020-12-14 15:34:05 · 6894 阅读 · 0 评论 -
项目实战:Java实现超大文件分片加密和解密(附完整源码)
文章目录一,项目需求二,实现思路三,源码分析四,最后总结一,项目需求今天在工作中遇到这样一个问题,系统中,文件上传的过程中需要进行加密,下载时再进行对应的解密。当文件不是太大时没有问题,但是当文件过大时,比如有个几百M或者几个G时就出问题了。这么大文件进行一次性加密解密,时间太长以至于出现系统超时,甚至出现内存溢出的情况。如何解决?经过研究,我们在进行文件加密时其实没有必要加密整个文件,只加密其中的一部分(比如加密1M文件),然后和另外一部分不加密的文件拼接在一起,生成最终的加密文件。虽然只加密了其.原创 2020-11-23 11:00:10 · 5213 阅读 · 11 评论 -
Java基础之:System.arraycopy方法使用
方法声明如下:public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);参数说明如下:Object src : 原数组int srcPos : 从原数据的起始位置开始Object dest : 目标数组int destPos : 目标数组的开始起始位置int length : 要copy的数组的长度使用示例:public static vo原创 2020-11-13 11:07:44 · 355 阅读 · 0 评论 -
Guava(瓜娃)使用笔记
Guava(瓜娃)学习笔记Guava工程包含了若干被google的java项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 所有这些工具每天都在被Google的工程师应用在产品服务中。这些高质量的API可以使你的java代码更原创 2020-10-28 09:58:18 · 1815 阅读 · 3 评论 -
手把手教您 CentOS7下搭建Jenkins
文章目录一,Jenkins 是什么二,CentOS7 下 Jenkins 搭建过程三,可能遇到的问题一,Jenkins 是什么Jenkins 是什么嘞?它提供了软件开发的持续集成服务,运行在 Servlet 容器中(例如 Apache Tomcat )。它支持软件配置管理( SCM )工具(包括 AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase 和 RTC ),可以执行基于 Apache Ant 和 Apache Maven 的项目,以及任意的 Sh.原创 2020-10-27 14:05:43 · 518 阅读 · 2 评论 -
详解Java类加载机制
1、ClassNotFoundExcetpion我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题。对于这个异常,它实质涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然它和我们直接打交道不多,但是对其背后的机理有一定理解有助于我们排查程序中出现的类加载失败等技术问题。2、类的加载过程一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段,JVM将类加载过程分为: 加载-&g原创 2020-10-27 13:36:31 · 430 阅读 · 0 评论 -
最常见的12道计算机基础面试题
前言本篇总结了12道最常见的计算机网络面试题,并给出了一些自己的看法,若有不妥之处万望指正。请详细介绍一下 TCP 的三次握手机制,为什么要三次握手?在讲三次握手之前首先要介绍 TCP 报文中两个重要的字段:一个是序号字段,另一个是确认号字段,这两个字段将在握手阶段以及整个信息传输过程起到重要作用。第一步:客户端 TCP 向服务端的TCP发送一个不带额外数据的特殊 TCP 报文段,该报文段的 SYN 标志位会被置1,所以把它称为 SYN 报文段。这时客户端会选取一个初始序列号(假设为 clien原创 2020-10-27 09:56:59 · 8710 阅读 · 0 评论 -
Java面试题带答案-基础知识考察
java面试题一,指出下面程序的运行结果class A {static {System.out.print(“1”);}public A() {System.out.print(“2”);}}class B extends A{static {System.out.print(“a”);}public B() {System.out.print(“b”);}}public class Hello {public static void main(String[] arg原创 2020-10-17 17:20:22 · 482 阅读 · 0 评论 -
多库多事务降低数据不一致概率问题
文章目录一、案例缘起二、补偿事务三、事务拆分分析与后置提交优化四、总结一、案例缘起我们经常使用事务来保证数据库层面数据的ACID特性。举个栗子,用户下了一个订单,需要修改余额表,订单表,流水表,于是会有类似的伪代码:start transaction; CURDtable t_account; any Exception rollback; CURDtable t_order; any Exceptionrollback; CU.原创 2020-10-14 23:02:35 · 284 阅读 · 1 评论 -
DB主从一致性架构优化几种方法
文章目录一,需求缘起二,方案一(半同步复制)三,方案二(强制读主库)四,方案三(数据库中间件)五,方案四(缓存记录写key法)六,总结一,需求缘起大部分互联网的业务都是“读多写少”的场景,数据库层面,读性能往往成为瓶颈。如下图:业界通常采用“一主多从,读写分离,冗余多个读库”的数据库架构来提升数据库的读性能。这种架构的一个潜在缺点是,业务方有可能读取到并不是最新的旧数据:(1)系统先对DB-master进行了一个写操作,写主库(2)很短的时间内并发进行了一个读操作,读从库,此时主从同步没有.原创 2020-10-14 22:17:38 · 278 阅读 · 0 评论 -
主从DB与cache一致性问题
文章目录一,前言二、需求缘起三、为什么数据会不一致四、不一致优化思路五、总结一,前言本文主要讨论这么几个问题:(1)数据库主从延时为何会导致缓存数据不一致(2)优化思路与方案二、需求缘起上一篇《缓存架构设计细节那些事》中有一个小优化点,在只有主库时,通过“串行化”的思路可以解决缓存与数据库中数据不一致。引发大家热烈讨论的点是“在主从同步,读写分离的数据库架构下,有可能出现脏数据入缓存的情况,此时串行化方案不再适用了”,这就是本文要讨论的主题。三、为什么数据会不一致为什么会读到脏数据,有这.原创 2020-10-14 20:39:55 · 431 阅读 · 0 评论 -
秒杀抢单系统软件架构优化思路
文章目录一、秒杀业务为什么难做二、优化方向三、常见秒杀架构四、各层次优化细节第一层,客户端怎么优化(浏览器层,APP层)第二层,站点层面的请求拦截第三层,服务层来拦截(反正就是不要让请求落到数据库上去)第四层,数据库层五、总结六、Q&A一、秒杀业务为什么难做1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如.原创 2020-10-14 09:31:54 · 2729 阅读 · 2 评论 -
怎么回事?怎么又要为表增加一列属性
啥,又要为表增加一列属性原创 2020-10-14 09:31:14 · 273 阅读 · 2 评论 -
数据库软件架构设计到底需要设计些什么
文章目录一、基本概念二、数据库架构设计思路(1)可用性(2)读性能(3)一致性(4)扩展性一、基本概念概念一“单库”概念二“分片”分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库。路由规则通常有3种方法:(1)范围:range优点:简单,容易扩展缺点:各库压力不均(新号段更活跃)(2)哈希:hash优点:简单,数据均衡,负载均匀缺点:迁移麻烦(2库扩3库数据要迁移)(3)路由服务:route.原创 2020-10-14 09:30:43 · 499 阅读 · 4 评论 -
如何实施异构服务器的负载均衡及过载保护
文章目录一、需求缘起二、service层的负载均衡通常是怎么做的三、通过“静态权重”标识service的处理能力四、通过“动态权重”标识service的处理能力五、过载保护六、如何借助“动态权重”来实施过载保护七、总结一、需求缘起第一篇文章“一分钟了解负载均衡”和大家share了互联网架构中反向代理层、站点层、服务层、数据层的常用负载均衡方法。第二篇文章“lvs为何不能完全代替DNS轮询”和大家share了互联网接入层负载均衡需要解决的问题及架构演进。在这两篇文章中,都强调了“负载均衡是指,将请.原创 2020-10-14 09:29:49 · 213 阅读 · 1 评论 -
互联网软件架构,该怎么进行容量规划
文章目录一,需求缘起二,容量评估的步骤与方法2.1步骤一:评估总访问量2.2步骤二:评估平均访问量QPS2.3步骤三:评估高峰QPS2.4步骤四:评估系统、单机极限QPS2.5步骤五:根据线上冗余度回答两个问题三,总结一,需求缘起在竞争激烈的电商公司中,会经常有这样的业务场景:场景一:市场部策划要做一个很大的运营活动,技术负责人冲过来,抛下两个问题:(1)服务器性能怎样,是否能抗住么?(2)如果扛不住,需要加多少服务器?场景二:系统设计阶段,技术负责人冲过来,又问了两个问题:(1)数据库需.原创 2020-10-14 09:33:00 · 666 阅读 · 2 评论 -
快速掌握数据库垂直拆分的方法
文章目录一、需求缘起二、什么是垂直拆分三、垂直切分的依据是什么四、为什么要这么这么拆分五、总结一、需求缘起当数据库的数据量非常大时,水平切分和垂直拆分是两种常见的降低数据库大小,提升性能的方法。假设有用户表:user(uid bigint,name varchar(16),pass varchar(16),age int,sex tinyint,flag tinyint,sign varchar(64),intro varchar(256)…);水平切分是指,以某个字段为依据(.原创 2020-10-14 09:33:22 · 406 阅读 · 1 评论 -
详细聊聊分布式系统中ID生成方法
文章目录一、需求缘起二、常见方法、不足与优化方法一:使用数据库的 auto_increment 来生成全局唯一递增ID方法二:单点批量ID生成服务方法三:uuid方法四:取当前毫秒数方法五:类snowflake算法一、需求缘起几乎所有的业务系统,都有生成一个记录标识的需求,例如:(1)消息标识:message-id(2)订单标识:order-id(3)帖子标识:tiezi-id这个记录标识往往就是数据库中的唯一主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个.原创 2020-10-13 19:25:41 · 343 阅读 · 1 评论 -
互联网公司为啥基本不使用mysql分区表
需求缘起:有个朋友问我分区表在我们公司的应用,我回答不出来,在我印象中,百度、腾讯都没有听说有分区表相关的应用,业内进行一些技术交流的时候也更多的是自己分库分表,而不是使用分区表。于是去网上查了一下,并询问了大厂的DBA专家朋友们,将自己收到的信息沉淀下来,分享给大伙。解决什么问题?回答:当mysql单表的数据库过大时,数据库的访问速度会下降,“数据量大”问题的常见解决方案是“水平切分”。mysql常见的水平切分方式有哪些?回答:分库分表,分区表什么是mysql的分库分表?回答:把一个很大的库(原创 2020-10-13 19:15:48 · 1640 阅读 · 4 评论 -
详细聊聊冗余表数据一致性问题
一、前言本文主要讨论四个问题:(1)为什么会有冗余表的需求(2)如何实现冗余表(3)正反冗余表谁先执行(4)冗余表如何保证数据的一致性二、需求缘起互联网很多业务场景的数据量很大,此时数据库架构要进行水平切分,水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非patition key上的查询可能就需要扫描多个库了。例如订单表,业务上对用户和商家都有订单查询需求:Order(oid, info_detail)T(buyer_id, selle原创 2020-10-13 19:09:40 · 899 阅读 · 0 评论 -
缓存架构设计细节那些事
一、前言本文主要讨论这么几个问题:(1)“缓存与数据库”需求缘起(2)“淘汰缓存”还是“更新缓存”(3)缓存和数据库的操作时序(4)缓存和数据库架构简析二、需求缘起场景介绍缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。例如对于用户的余额信息表account(uid, money),业务上的需求是:(1)查询用户的余额,SELECT money FROM account WHERE uid=XXX,占99%的请求(2)更改用户余额,UPDATE原创 2020-10-13 19:02:26 · 154 阅读 · 0 评论 -
缓存与数据库一致性该如何保证
一、前言本文主要讨论这么几个问题:(1)啥时候数据库和缓存中的数据会不一致(2)不一致优化思路(3)如何保证数据库与缓存的一致性二、需求缘起当我们在操作缓存时,到底是先写数据库再写缓存,还是先写缓存再写数据?由于操作缓存与操作数据库不是原子的,所以不管先执行哪个,都非常有可能出现执行失败。假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致【如上图:db中是新数据,cache中是旧数据】。假设先淘汰缓存,再写数原创 2020-10-13 18:52:37 · 695 阅读 · 1 评论 -
Linux命令:监控工具集合
今天整理了之前在工作中一直用的用于查询服务器性能问题的一套工具集,希望对大家有用。一,内存使用情况free -m二,磁盘IO性能情况iostat -xdk 1二(1)pidstat监控工具u:默认的参数,显示各个进程的cpu使用统计-r:显示各个进程的内存使用统计-d:显示各个进程的IO使用情况-p:指定进程号-w:显示每个进程的上下文切换情况-t:显示选择任务的线程的统计信息外的额外信息-T { TASK | CHILD | ALL }这个选项指定了pidstat监控的。TASK原创 2020-10-13 14:18:04 · 169 阅读 · 1 评论 -
Linux命令:find /home/ -xdev -size +100M -exec ls -lh {} \
今天在工作中遇到一个问题,需要查询服务器上所有大于100M的文件名称,经过半个钟的捣鼓,捣鼓出以下这个强大的命令:find /home/ -xdev -size +100M -exec ls -lh {} \意思就是查询 /home 目录下所有大小大于100M的文件。当然/home目录和100M大小可以换成其他目录。真心发现Linux的find命令无比强大(当然Linux的其他一些命令也强大)...原创 2020-10-13 14:00:47 · 741 阅读 · 0 评论 -
多线程并发数量设置设多少算合理
一、需求缘起Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。“工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能,是本文要讨论的问题。二、一些共性认知在进行进一步深入讨论之前,先以提问的方式就一些共性认知达成一致。提问:工作线程数是不是设置的越大越好?回答:肯定不是的1)一来服务器CPU核原创 2020-10-13 13:43:42 · 3443 阅读 · 2 评论 -
带你一分钟了解负载均衡的一切
什么是负载均衡:负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。常见的负载均衡方案常见互联网分布式架构如上,分为客户端层、反向代理nginx层、站点层、服务层、数据层。可以看到,每一个下游都有多个上游调用,只需要做到,每一个上游都均匀访问每一个下游,就能实现“将请求/数据【均匀】分摊到多个操作单元上执行”。【客户端层->反向代理层】的负载均衡【客户端层】到【反向代理层】的负原创 2020-10-13 10:39:06 · 177 阅读 · 1 评论 -
Apollo配置中心搭建手册
Apollo配置中心搭建手册提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录Apollo配置中心搭建手册前言一、准备工作二、使用步骤1.引入库2.读入数据总结前言Apollo部署架构图一、准备工作下载Apollo.zip软件依赖:mysql5.6以上数据库,jdk1.8+二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as plt原创 2020-09-27 19:05:24 · 507 阅读 · 2 评论 -
springboot微服务集成Apollo配置中心
springboot微服务集成Apollo配置中心文章目录springboot微服务集成Apollo配置中心一,配置步骤1.1,Apollo配置文件配配置1.1.1,创建项目1.1.2,命名空间管理1.1.3,命名空间的创建1.1.4,命名空间配置文件配置1.2,spring boot 对接Apollo1.2.1,初始化spring boot微服务参数1.2.2,配置启动参数1.2.3,IDEA本地调试1.2.4,linux下启动1.3,在微服务resources目录下配置apollo-env.pr原创 2020-09-27 19:34:08 · 753 阅读 · 1 评论 -
Java jvisualvm性能监控简要说明
Java jvisualvm性能监控简要说明文章目录Java jvisualvm性能监控简要说明一,简要说明二,第三方插件安装三,监控程序cpu,内存使用情况四,GC监控五,内存溢出,泄露监控5.1,堆dump分析5.2,解决内存溢出问题5.2.1,永久保存区内存溢出:java.lang.OutOfMemoryError: PermGen space5.2.2,堆栈区内存溢出:java.lang.OutOfMemoryError: Java heap space一,简要说明JDK自带的JAV原创 2020-09-27 20:46:05 · 460 阅读 · 1 评论