自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 收藏
  • 关注

原创 MySQL备份与恢复数据

一、备份命令:mysqldumpMySQL自带的备份命令mysqldump:把数据库中的数据以逻辑的sql语句形式直接输出生成sql文件。参数解析: 1 -A --all-databases:导出全部数据库 2 -Y --all-tablespaces:导出全部表空间 3 -y --no-tablespaces:不导出任何表空间信息 4 --add-drop-database每个数据库创建之前添加drop数据库语句。 5 --add-drop-table每个数据表创建之前添加drop数据表

2020-06-05 23:46:09 453

原创 Spring单例模式下的多线程访问

一直以来有个疑问?Spring中的bean不是单例模式吗?为什么那么多客户端访问同一个接口不会出现线程安全问题?其实:spring单例模式指的是在内存中只实例化一个类的对象。确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。当多个用户同时请求一个接口服务的时候,容器会给每一个请求分配一个线程,这时候多个线程会并发执行该请求所对应的业务逻辑。如果该逻辑涉及到对该单例状态(成员变量)的改变,就会有线程安全的问题。Spring使用ThreadLocal来解决线程安全问题,每个线程去执行业

2020-06-03 00:29:09 2492 1

原创 ZooKeeper源码分析笔记(二)Watch机制

一、Watch机制是如何实现的通过点击视频网站上的”收藏“按钮来订阅我们喜欢的内容,ZooKeeper 的客户端也可以通过 Watch 机制来订阅当服务器上某一节点的数据或状态发生变化时收到相应的通知,我们可以通过向 ZooKeeper 客户端的构造方法中传递 Watcher 参数的方式实现:new ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)//connectString 服务端地址//sessionTim

2020-05-22 00:56:43 467

原创 ZooKeeper源码分析笔记(一)数据模型

一、ZK的数据模型数据模型是ZK用来存储和处理数据的一种逻辑结构,就像用MySQL一样。启动ZK:1、配置文件tickTime=2000dataDir=/var/lib/zookeeperclientPort=21812、启动ZK服务端bin/zkServer.sh start3、启动ZK客户端,连接服务端bin/zkCli.sh -server 127.0.0.1:21814、单机版的开发环境构建完成,利用create命令创建几个节点,分别为create /lockscreate

2020-05-13 15:03:00 295

原创 ElasticSearch7.6 整合Springboot测试API(五)

一、加入ES依赖特别注意的是:如果是Springboot自带的ES依赖可能跟我们本地的ES版本不一致,记得改为本地版本!<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-d...

2020-04-26 23:24:00 624

原创 ElasticSearch7.6 安装教程(二)

一、ElasticSearch安装教程window安装教程1、官网下载最新版本,解压安装就可以用。2、目录熟悉bin 启动文件config 配置文件log4j2 日志配置文件jvm.options java 虚拟机相关的配置,注意里面的堆大小配置!elasticsearch.yml elasticsearch 的配置文件! 默认 9200 端口! 跨域!...

2020-04-22 17:59:11 824

原创 ElasticSearch7.6 基本操作(四)

一、基于Restful风格基于这类风格涉及的软件可以更简洁,更有层次,更易于实现缓存等机制。基本Rest命令说明:二、索引的基本操作创建一个索引:PUT /索引名/类型名/文档id{请求体}这样就完成了索引和文档的自动增加,数据也成功添加。字段自动指定类型,或者也手动设置类型。创建时指定字段类型通过GET _cat/indices?v查看所有索引库的信息。删...

2020-04-22 17:56:16 1154

原创 ElasticSearch7.6 IK分词器(三)

一、什么是IK分词器?分词:即把一段中文或英文划分成一个个的关键字,我们在搜索时会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作。默认的中文分词是将每个字看成一个词,比如“今天真快乐”被分成今、天、真、快、乐,显然不符合要求,所以我们需要安装IK中文分词器,根据配置的.dic字典文件来进行分词。IK提供了两个分词算法:ik_smart 最少切分,ik_max...

2020-04-21 15:20:35 1373

原创 ElasticSearch7.6 入门学习(一)

一、ElasticSearch概述ES是一个基于Lucene(信息检索工具包)做一些封装和增强的可扩展的的分布式全文检索引擎,几乎是实时存储和检索数据。本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。它的目的是通过简单的RestFul API来 隐藏Lucene的复杂性,从而让全文搜索变得简单,已经成为排名第一的搜索引擎类应用。应用场景:涉及到搜索的应用都可以使用El...

2020-04-20 00:44:25 842

原创 MySQL优化 -- 系统配置优化(四)

一、操作系统配置优化数据库是基于操作系统的,目前大多数MySQL是安装在Linux系统上,所以对于操作系统的一些参数配置也会影响MySQL的性能。网络方面的配置,要修改/etc/sysctl.conf文件:增加tcp支持的队列数:net.ipv4.tcp_max_syn_backlog = 65535减少断开连接时,资源回收:net.ipv4.tcp_max_tw_buckets = ...

2020-04-17 10:34:05 177

原创 MySQL优化 -- 数据库结构优化(三)

一、选择合适的数据类型1、使用可以存下数据的最小的数据类型。使用int来存储日期时间,利用from_unixtime(),unix_timestamp()两个函数来对日期格式进行转换:insert into test(timestr) values(unix_timestamp('2020-02-21 15:34:33'));select from_unixtime(timestr) fr...

2020-04-16 16:16:50 142

原创 MySQL优化 -- SQL及索引优化(二)

一、Count()和Max()的优化方法查找最后的支付时间:对支付时间建立索引:create index idx_paydate on payment(payment_date);查询:select max(payment_date) from payment;在一条SQL中同时查出2006年和2007年电影的数量 - 优化count()函数:对count函数使用的列做处理:se...

2020-04-16 10:14:46 180

原创 MySQL优化 -- SQL及索引优化(一)

一、如何发现有问题的SQL?使用MySQL慢查询日志对有效率问题的SQL进行监控:查看是否有开启慢查询日志记录:show variables like 'slow_query_log';设置没用到索引的查询都记录:set global log_queries_not_using_indexes=on;开启慢查询日志记录:set global slow_query_log=on;查看...

2020-04-05 22:05:18 170

原创 MySQL数据库优化简介

一、数据库优化的目的避免出现页面访问错误:由于数据库连接timeout产生页面5xx错误。由于慢查询造成页面无法加载。由于阻塞造成数据无法提交。增加数据库的稳定性:很多数据库都是由于低效的查询引起的。优化用户体验:流畅页面的访问速度。良好的网站功能体验。二、数据库优化的方面有哪些?...

2020-04-04 22:19:15 115

转载 Springboot 整合MyBatisPlus 出现的问题

1、需要手动配置MybatisSqlSessionFactoryBean。2、需要手动配置DataSource。参考该链接

2020-03-18 09:56:04 325

转载 初始G1垃圾收集器

掘金这篇G1很好理解。

2020-03-08 11:44:50 101

转载 Redis 之 BitMap统计用户在线

使用BitMap 统计用户在线的好处相比于其他方法,BitMap的优点

2020-02-29 18:03:04 524

转载 MySQL 之 MVCC介绍

简介MVCC (multiversion concurrency control),多版本并发控制,主要是通过在每一行记录中增加三个字段,与 undo log 中相关记录配合使用,同时加上可见性算法,使得各个事务可以在不加锁的情况下能够同时地读取到某行记录上的准确值(这个值对不同的事务而言可能是不同的)。使用 MVCC,在不加锁的情况下也能读取到准确的数据,大大提高了并发效率。MVCC 更新操...

2020-02-26 11:23:46 784 1

原创 二维码登录原理

问题:如果我们使用其他软件来扫码登录有什么问题?因为二维码的转码规则是统一的,所有任何扫码软件都可以得到二维码里面的信息,比如上图二维码包含的是随机字符串uuid和登录验证接口信息。但只有同一软件的手机端才能对这些信息做处理。比如手机端服务器验证该接口信息和用户信息,并将用户uid存入redis中。重要的不是扫描二维码中的信息,而是谁扫描了这个信息。问题:这种登录方式安全吗?由于整个验证过...

2020-02-23 15:49:52 368

转载 Java8 -- stream的详细用法

一、概述Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。特点:1 . 不是数据结构,不会保存数据...

2020-02-19 14:05:52 225

原创 JPA之@EnableJpaAuditing注解

在Spring JPA中,支持在字段或方法上进行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy。具体含义:**@CreateDate: ** 表示该字段是创建时间字段,在这个实体被insert的时候,会自动填充创建的时间,不用手动填充该字段。**@CreatedBy: ** 表示该字段是创建人字段,在这个实体被insert...

2020-02-18 11:44:38 11490

转载 零拷贝的实现原理

场景:从一个文件中读出数据并将数据传送到另一台服务器上?File.read(file, buf, len);Socket.send(socket, buf, len);一共涉及了4次数据拷贝:应用程序中调用read() 方法,这里会涉及到一次上下文切换(用户态->内核态),底层采用DMA(direct memory access)读取磁盘的文件,并把内容存储到内核地址空间的读...

2020-01-12 10:23:17 150

原创 Guava异步编程之ListenableFuture

前提:Java的Future虽然已经提供异步操作,但是不能直接回调。Guava对Future进行了增强,核心接口就是ListenableFuture。一、ListenableFuture源码解析guava对JDK的异步增强可以通过看MoreExecutor和Futures两个类的源码入手。ListenableFuture继承了Future,额外新增了一个方法,listener是任务结束后...

2020-01-11 17:24:45 2196 1

原创 Java异步编程之Future机制原理

一、回顾Runnable和Callable区别:Callable定义了call()方法,Runnale定义了run()方法。call()方法可以抛出异常,run()方法无法抛出异常。Callable有返回值,是泛型的,创建的时候传递进去,执行结束后返回。Callable执行任务的时候可以通过FutureTask得到任务执行的状态。联系:Callable的call方法实际执行在R...

2020-01-11 11:18:49 2766

原创 @Transactional注解配置事务管理

Spring事务管理分为编程式和声明式:编程式:通过编码实现事务。声明式:基于AOP,将具体业务逻辑与事务处理解耦,使业务代码不受污染。声明式有两种方式:一种是在配置文件xml中做相关的事务规则声明。另一种是基于@Transactional注解。前提明确:默认配置下Spring只会回滚运行时,未检查异常(继承RuntimeException异常)或者Error。@Transact...

2020-01-07 23:56:27 708

原创 Springboot 整合Swagger

Swagger的好处代码变,文档变。只需要少量的注解,保证了文档的失效性。跨语言性,支持40多种语言。Swagger UI呈现的是一份可交互式的API文档,可以直接在文档上进行API的调用,省去了准备复杂的调用参数。还可以将文档规范导入相关的工具(SoapUI),这些工具将会为我们自动地创建自动化测试。1、创建工程利用Spring Initializr快速创建一个springboo...

2020-01-05 11:03:35 104

原创 Springboot 整合Mybatis

1、环境参数开发工具:IDEA+Maven+JDK8技术:Springboot+Mybatis数据库:MySQL版本:Springboot 2.1上2、创建工程利用Spring Initializr快速创建springboot工程,记得导入 web、MySQL server、jdbc、Mybatis这些模块的依赖。3、创建用户表CREATE TABLE `user` ( `...

2020-01-05 10:00:41 97

原创 MySQL性能优化 -- 服务器配置优化

常用查看性能参数的方法show variables:查看服务器一些静态的参数,如缓冲区大小,字符集,数据文件名称等信息。show rariables:查看的是MySQL启动之前已经配置号的一些系统静态参数。show status:查看服务器运行中的状态信息,如当前连接数,锁等状态信息。1、key_buffer_size的设置:该参数用来设置索引块缓存的大小,只使用于MyISAM存储引擎,...

2019-12-29 15:27:09 375

原创 MySQL性能优化 -- SQL语句优化

SQL语句优化对查询优化,应尽量避免全表扫描,首先考虑在where及order by涉及的列上建立索引。尽量避免在where子句对字段进行null值判断,会导致引擎放弃使用索引而进行全表扫描,可以设置默认值为0,来代替null值。select id from t where num=0;尽量避免在where子句使用 != 或 <>或 使用or连接 或 使用in 和 ...

2019-12-28 10:18:32 110

原创 Springboot 核心注解一

三大核心注解1、@Configuration这是spring3.0添加的一个注解,用来代替applicationContext.xml配置文件,所有这个配置文件里能做到的事情都可以通过这个注解所在类来进行注册。@Bean:代替XML配置文件里面的bean配置。@ImportResource:如果有些通过类的注册方式配置不了的,可以通过这个注解引入其他的XML配置文件。@Import:用来...

2019-12-28 10:16:20 209

原创 查询MySQL数据表中的最后一条记录

mysql:select * from table order by id DESC limit 1使用:查询出表中的最后一条记录,获取他的id,插入一条新记录时,id在此基础上加1.

2019-11-27 20:23:12 1067

转载 Java文件上传与删除

一、文件上传到服务器上: /** * 上传文件 * @param file 文件 * @param request HttpServletRequest * @return 返回文件基本信息 */ @RequestMapping(value = "/upload", method = RequestMethod.POST) ...

2019-11-27 20:18:07 819

原创 Hibernate的NonUnique异常

一个hibernate中的异常:NonUniqueDiscoveredSqlAliasException在hibernate中用SQL查询返回的结果集中,列名或别名必须唯一,否则会报下面的错误。返回的结果集中,列名或别名可以没有,但只能有一列没有。//空别名重复的情况:org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasExcepti...

2019-11-27 19:33:38 427

原创 实习日志一

1、SVN版本控制问题一般来说,我们从服务器拉下代码后,最好是把文件复制一份,打开复制的那一份,然后进行编写,最后要提交之前,先更新到最新,然后比对冲突,如果没有冲突的直接提交即可。有冲突要进行商量合并,再提交。最好在IDEA上配置SVN,在idea上操作会更简单一些。2、将项目打包成jar包,并上传到服务器首先,该项目在本机运行要不能出错,然后配置maven插件,打包之前先使用clean...

2019-11-21 23:33:44 249

原创 JWT 快速了解

1、JWT简介JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。它定义了一个紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息,因为此信息是经过数字签名的,因此是可以被验证和信任的。2、JWT认证和Session认证的区别session认证http协议是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请...

2019-11-19 23:54:45 145

原创 如何设计一个秒杀系统 -- 动静分离方案

何为动静数据:所谓“动静分离”,其实就是把用户请求的数据(如HTML页面)划分为“动态数据”和“静态数据”。简单来说,动态数据和静态数据的主要区别就是看页面中输出的数据是否和URL,浏览者,时间,地域相关,以及是否含有Cookie等私密数据。比如:1、某一博客的文章内容不管是谁访问都是一样的,所以它就是一个典型的静态数据,但是它是个动态页面。2、我们访问淘宝的首页,每个人看到的页面都是不一...

2019-11-03 15:46:53 426

原创 如何设计一个秒杀系统 -- 架构原则

秒杀系统本质上就是一个满足大并发,高性能和高可用的分布式系统。架构原则:4 要 1 不要1、数据要尽量少首先是指用户请求的数据能少就少。请求的数据包括上传给系统的数据和系统返回给用户的数据。(网页)为什么?因为首先这些数据在网络上传输需要时间,其次不管是请求数还是返回数据都需要服务器做处理,而服务器在写网络时通常都要做压缩和字符编码,这些都非常消耗CPU,所以减少传输的数据量可以显著减少C...

2019-10-27 17:22:49 185

原创 如何设计一个秒杀系统 -- 关键点设计

来自许令波老师的课 – 设计一个秒杀系统。如何才能更好理解秒杀系统呢?秒杀其实主要解决两个问题:一个是并发读,一个是并发写。并发读的核心优化理念是尽量减少用户到服务端来“读”数据,或者让他们读更少的数据;并发写的处理原则也一样,要求我们在数据库层面独立出来一个库,做特殊的处理。另外,我们还需要对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生。从架构师角度来看,要想打...

2019-10-27 11:04:40 328

转载 JVM默认的垃圾收集器

jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)jdk1.9 默认垃圾收集器G1-XX:+PrintCommandLineFlagsjvm参数可查看默认设置收集器类型-XX:+PrintGCDetails亦可通过打印的GC日...

2019-10-27 10:21:53 132

原创 redis为单线程为什么可以这么快?

1、完全基于内存操作,非常快速。数据存在内存中,类似于hashmap,优势就是查找和操作的时间复杂度都是O(1)2、数据结构简单,对数据的操作也简单,redis中的数据结构是专门进行设计的。3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,,不存在加锁和释放锁的操作。4、使用多路I/O复用模型,非阻塞IO。5、使用底层...

2019-10-26 13:12:17 121

空空如也

空空如也

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

TA关注的人

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