自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李光 未来科技

不积跬步,无以至千里,不积小流,无以成江海

  • 博客(326)
  • 问答 (2)
  • 收藏
  • 关注

原创 彻底搞懂jdk1.8中的haspMap原理(源码解析+ 对比jdk1.7)

前言:本博客只对jdk1.7中的hashMap进行文字性的说明,源码的说明只针对jdk1.8,因为现在开发多数都是jdk1.8.一、map结构它是双列数据,保存具有映射关系“key-value对”的集合,map中的元素具有无序的,不可重复的特点,那么这个特点是怎么保证的呢,我们可以将它的key 看成set存储(因为它是无序的,不可重复的),将它的value看成collection存储(有序,可重复的)二、HashMap的底层实现原理jdk1.8HashMap的大致结构如下图所示:其中哈希表是一个

2020-07-05 20:37:51 500

原创 为什么匿名类是没有名字的,明明有名字的解释

首先大家看一下下面的代码,大家应该还算熟悉吧,他其实就是一个匿名类。 Runnable runnable = new Runnable() { @Override public void run() { for (int i = 1; i <= 20; i++) { ad.loopA(i); } } };

2020-07-02 13:15:08 677

原创 【java 设计模式】 单例模式精解(面试再也不用怕了)

前言这篇 博客是跑更问底的学习单例模式,看了本博客,对于一般的面试官,你都可以手撕了,但是大神级别的面试官,后边还会补充。一、手写单例模式1、饿汉式public class Singleton { // 构造方法私有化,其他类就不能通过new的方式来创造对象 private Singleton(){ } // 内部提供一个当前的实例,必须要静态化,因为下面的静态方法要调用 private static Singleton singleton=new Singl

2020-06-30 20:16:53 325 3

转载 Java Integer.valueOf()和Integer.parseInt()的区别

前言大家都知道Integer类中有Integer.valueOf(String s)和Integer.parseInt(String s)两个静态方法,他们都能够将字符串转换为整型。说到这里你肯定会想同一个功能为什么要提供两个不同的方法,这不是浪费吗?区别Integer.parseInt(String s)将会返回int常量。Integer.valueOf(String s)将会返回Integer类型,如果存在缓存将会返回缓存中已有的对象。使用不当将会产生的问题由于Java的自动拆箱和装箱机制导

2020-06-28 16:49:18 5123 1

原创 彻底明白LinkedList插入数据的实现原理

前言:linkedList是通过一个双向链表来实现的,它允许插入所有元素,包括null,它是线程不安全的1、双向链表是什么样子如下图:双向立案别有一个first指针和next指针,分别指向头结点和尾结点。另外还有一个前指针和后指针,指向前驱结点和后继结点上篇博客我们着重的讲解了ArrayList的扩容机制和add 方法,其中ArrayList如果在指定位置插入相关元素是非常耗时的,时间复杂度为O(n),那么这个双向链表到底是如何实现插入数据的呢,请看下图:2、源码分析2.1 属性 // 链

2020-06-25 22:16:57 4221

原创 jdk1.8中 ArrayList 底层数组到底是怎么扩容的

一、结论先行ArrayList在JDK1.8与JDK1.7底层区别JDK1.7:ArrayList像饿汉式,直接创建一个初始容量为10的数组JDK1.8:ArrayList像懒汉式,一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组二、JDK1.8源码分析1、ArrayList 属性 /** * 默认容量的大小 */ private static final int DEFAULT_CAPACITY = 10; /**

2020-06-25 10:09:14 795

原创 【多线程 四】线程间的通信

1、为什么要处理线程间通信 :当我们需要多个线程共同协作完成一件任务,并且希望他们有规律的执行,那么此时就需要线程之间进行通信。为了能达到此种目的我们需要引入一个机制——等待唤醒机制。2、 等待唤醒机制这是多个线程间的一种协作机制。就是在一个线程进行了规定操作后 ,就进入等待状态 (wait() ), 等待其他线程执行完他们的指定代码过后 再将 其唤醒 (notify() );在有多个线程进行等待时, 如果需要 ,可以使用 notifyAll()来唤醒所有的等待线程。2.1 wait() 与not

2020-06-19 23:16:02 251

原创 【多线程 三】线程同步的几种方式详解

1、问题引入当多个线程共同访问共享资源的时候,就会发生线程安全的问题,比如如下的程序:三个窗口同时卖一百张票,但最后出现没有存在的票(0 -1票)代码:public class TicketRunnableImpl implements Runnable{ private int ticket=100; @Override public void run() { while(true){ if(ticket>0)

2020-06-18 21:35:51 1587

原创 【多线程 一】概述

前言:此篇博客对多线程是一个整体的概述过程,后续会有具体的讲解。1、导图:2、何为线程线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。java就是一个多线程的,因为一个java应用程序最少也会有三个线程,比如man()线程,gc垃圾回收程序,异常处理线程3、为什么要用多线程问题引入:举个栗子,如果单核cpu,只使用单个线程先后完成多个任务(调用多个方法),肯定比用多个线程来完成的时间更短(大家想想

2020-06-17 09:22:39 216 3

原创 【多线程 二】线程创建和启动的四种方式(以及详解Thread和Runnable方式的优缺点)

1、继承Thread其实也是实现了runnable接口的。public class Threadextend extends Thread{ @Override public void run() { for(int i=0;i<=100;i++){ System.out.print("A"+i+ "\t"); } }}public class Main { public static void main

2020-06-16 22:44:49 996 1

原创 【rdeis 六】redis事务是个咋回事

1、什么是redis事务可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。就是说在一个队列中,一次性、顺序性、排他性的执行一系列命令。2、命令序号命令及描述1MULTI:标记一个事务块的开始。2EXEC:执行所有事务块内的命令。3DISCARD:取消事务,放弃执行事务块内的所有命令。4UNWATCH:取消 WATCH 命令对所有 key 的监视。5WATCH :WATCH

2020-06-11 16:05:27 201

原创 【redis 五】Redis持久化之aof

前言上一篇文章详细的介绍了redis RDB持久化,详细的讲述了其原理优缺点,接下来着重讲解AOF持久化。1、官网介绍地址:https://redis.io/topics/persistence以下内容为有道词典翻译AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数据集。使用与Redis协议本身相同的格式记录命令,并且采用仅追加方式。当日志太大时,Redis可以在后台重写日志。如果您希望,只要您的数据在服务器运行时就一直存在,则可以完全禁用持久性。可以在

2020-06-10 22:56:56 337

原创 【redis 四】一文搞懂redis持久化之RDB

前言:redis持久化分为RDB和AOF,此篇博文着重讲解RDB方式的持久化。演示系统 centos7。1、官网说明地址:https://redis.io/topics/persistence以下内容为有道词典翻译Redis持久性RDB持久性按指定的时间间隔执行数据集的时间点快照。RDB的优势RDB是Redis数据的非常紧凑的单文件时间点表示。RDB文件非常适合备份。例如,您可能希望在最近的24小时内每小时存档一次RDB文件,并在30天之内每天保存一次RDB快照。这使您可以在灾难情况下轻松还

2020-06-10 17:22:48 2222

原创 【redis 三】redis.conf 配置文件解析

redis.conf 配置项说明如下:Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,守护式进程就是说可以后台运行。daemonize no当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定pidfile /var/run/redis.pid指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应

2020-06-09 21:55:33 149

原创 【redis 二】常用命令以及应用场景

简介:redis(REmote DIctionary Server(远程字典服务器))是一款高性能的NOSQL(Not Only Sql)系列的非关系型数据库,Redis是用C语言开发的一个开源的高性能键值对(key-value)分布式内存数据库,被人们称为数据结构服务器。官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,这个数据我门可以用 redis-benchmark 来测试,下面是我的腾讯云服务器,2.91秒写了100000次,2.7

2020-06-09 11:59:43 265

原创 【redis 一】前奏 Nosql基石:CAP理论+BASE理论

**CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。**而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。**所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。****CA 传统Oracle数据库 AP 大多数网站架构的选择 CP Redis、Mongodb**

2020-06-09 10:45:57 433 1

原创 基于阿里云平台手机短信验证(用rabbitMq实现消息通知,有核心代码)

前言:获取AccessKeyID ,AccessKey Secret我就说个大概,大家可以看官方的帮助文档1、前期准备首先注册一个阿里云账号然后登录,产品分类,选择短信服务点击管理控制台进入到下面的界面就可以通过新手引导,和开发者指南进行操作了国内消息,进去之后可以添加签名和模板输入网址:https://ram.console.aliyun.com/users创建用户授权点击你创建好的用户,如下图进入之后创建AccessKey,就会找到AccessKeyID和Acce

2020-05-27 16:12:38 1818 2

原创 【rabbitMq 三】springboot整合rabbitmq(以topic为例)

前言:之前介绍了rabbitMq是用来干什么的,以及存在的意义是什么,现在与springBoot集成,用一个例子来体会一下。Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。1、启动类:@SpringBootApplicationpublic class RabbitmqDemoApplication { public static void main(String[] args) { S

2020-05-25 11:49:22 404

原创 【fastdfs】com.github.tobato.fastdfs.exception.FdfsServerException: 错误码:2,错误信息:找不到节点或文件

前言:今天在上传图片的时候,上传的服务报错,有点蒙蔽,之前都是可以成功的,现在怎么不行,后来发现是我的服务器的地址换了。只需要改两个位置就好。1、yml文件改成你的fastdfs tracker服务器的地址(一般就是你的服务器地址)2、storage.conf文件找到你的这个文件(下边是我安装的地方)vim /etc/fdfs/storage.conf进入之后,将tracker_server的地址改为现在你的tracker服务器的地址,端口是你的tracker的端口,一般默认都是22122

2020-05-24 20:20:15 13420 1

转载 【rabbitMq 二】web管理端详解

1 简介rabbitmq-management是RabbitMq web管理端,用的是erlang的cowboy框架进行开发。web页面包括Overview(概述)、Connections(连接)、Channels(通道)、Exchanges(交换器)、Queues(队列)、Admin(用户管理)。2 Overviewimage.png2.1 overview->Totalsimage.png所有队列的阻塞情况Ready:待消费的消息总数。Unacked:待

2020-05-24 11:01:29 850

原创 windows快速解决端口被占用问题

1、命令如 80端口netstat -aon|findstr "80"找到pid2、结束进程任务管理器,找到41125端口结束任务

2020-05-23 16:38:09 1075

原创 【docker 六】docker下安装rabbitMq

1、拉取镜像指定版本,该版本包含了web控制页面docker pull rabbitmq:management2、运行sudo docker run -di --name=tensquare_rabbitmq -p 5671:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management3、登录地址为:服务器ip:15672密码为默认的用户名和密码:guest/g

2020-05-22 19:06:44 289

原创 【docker 五】部署redis

1、拉取镜像docker pull redis:3.22、创建容器docker run -p 6378:6379 -v /myprojects/travel/myredis/data:/data -v /myprojects/travel/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendo

2020-05-21 21:58:44 576

原创 【docker 四】docker下安装tomcat并且部署项目(详细)

前言:上一篇博客简单的介绍了docker的基本命令,现在通过部分命令,咱们在docker下的tomcat进行牛刀小式一、测通tomcat1、拉取镜像tomcat:8docker pull tomcat:82、运行tomcat2.1 输入命令,运行tomcatdocker run -it -p 8080:8080 --name=mytomcat tomcat:8以下表示tomcat运行成功,端口映射也是80802.2 测试因为我的是在腾讯云服务器上部署的,所以我就在我的本地机器上

2020-05-17 18:27:42 10123 2

原创 【docker 三】docker常用命令

前言:前面两篇文章已经介绍了docker的概述和在腾讯云的centos 7上安装docker以及配置阿里云镜像加速,接下来对docker的常用命令进行总结归纳。一、与docker启动停用有关的命令启动docker:systemctl start docker停止docker:systemctl stop docker重启docker:systemctl restart docker查看docker状态:systemctl status docker开机启动:systemctl

2020-05-16 21:55:31 323 1

原创 【docker 二】centos7下安装docker以及配置镜像加速器

前言本人用的是腾讯云服务器 centos7.6,为了让更多人看懂,所以步骤较为详细。1、卸载旧版本$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-l

2020-05-15 17:04:03 675

原创 【docker 一】概述

1、docker是什么docker是基于Go语言实现的云开源项目,主要目标是使用户的app及运行环境做到“一次封装,到处运行"。2、为什么会出现docker一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。环境配置如此麻烦,换一台机器,就要重来一次,费力费时。也就是说

2020-05-14 22:48:49 194

原创 【RabbitMq 一】概述

1、为什么引入MQ(消息队列)解决服务之间数据同步的问题,每个服务的基本数据都有自己存储的地方,当一个服务的数据 变化的时候,其他的服务数据应该也会跟着变化,如果用代码来做约束了,违背了服务的独立的原则,此时引入技术MQ2、MQ简介MQ是典型的生产者、消费者模型,生产者负责向消息队列中生产消息,消费者从队列中获取消息,然后笑死的生产和消费都是异步的,这样消费者和生产者就实现了解耦合,现在实现...

2020-04-25 16:05:27 184

原创 【centos7】动态ip改为静态ip,已经主机和虚拟机相互ping通

一、目的解决换一个网络,系统的ip就会跟着变的问题二、具体操作1、查看起始的ip地址和结束的ip地址,如下图,点击编辑,选择虚拟网络编辑器,然后选择net 模式,将使用本地DHCP 服务ip地址分配给虚拟机的钩去掉(如果之前你改的东西很多,可以选择还原默认设置重新操作),然后点击NAT设置,2、查看网关信息,点击net设置,网关ip需要记住,后边有用3、要启动的虚拟机要是nat模式,...

2020-04-23 17:26:55 1247 1

原创 【java】StringUtils.isEmpty 和 StringUtils.isBlank的区别

1、所需要的包import org.apache.commons.lang.StringUtils;2、StringUtils.isEmpty这个用来判断字符串是否为空,等同于:str==null || str.length()==0System.out.println(StringUtils.isEmpty(null)); //trueSystem.out.printl...

2020-04-19 22:29:59 1179 1

原创 (.bat)批处理应用小技巧

前言:给大家秀一波小技巧,不想谈什么原理了,只想简单的秀一下,大神只需路过,菜鸟可以看一下!应用场景一:大家在启用nginx的时候是习惯点击nginx.exe还是习惯用命令呢?如果用命令的话,需要win+r 进入到nginx安装的位置 在输入 start nginx.exe就可以启动了,如果是要停止nginx,可以输入nginx.exe -s stop,或者去资源管理器强制停止此时如果...

2019-12-11 22:48:56 566 5

原创 java8新特性之stream的collect实战

1、list转换成list不带return方式 List<Long> ids=wrongTmpList.stream().map(c->c.getId()).collect(Collectors.toList());带return方式// spu集合转化成spubo集合//java8的新特性 List<SpuBo> spuBos=spuLis...

2019-12-03 10:04:11 378 3

转载 【mysql】日期数据插入mysql数据库时,日期总会少一天的解决办法

百度了之后,发现有提到可能是驱动的问题,就检查了下驱动信息,果然发现连接参数中的字段serverTimezone设置为UTC,检查之后改为HongKong 或者 Asia/Shanghai就可以了jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&u...

2019-12-01 19:33:55 3768 3

原创 yml配置 向前端返回数据时自动忽略参数为null的属性

44

2019-10-16 09:08:53 878 5

原创 【springCloud】feign.RetryableException: Read timed out executing GET.。的有效解决办法

1.错误如下图2.解决办法错误提示是请求超时,那我们就把请求的时间改大不久行了,这也是网上的大多数朋友给的解决方案,在网关配置ribbon:ribbon: ConnectTimeout: 60000 # 连接超时时间(ms) ReadTimeout: 60000 # 通信超时时间(ms)hystrix: command: default: executi...

2019-10-08 16:13:48 12525 3

原创 lucene浅谈

1.导图:2.简述:lucene是基于java的全文索引,用来快速的检索数据,之前我们接触到的是结构化的数据,例如数据库,但是对于非结构化数据内容的查找就需要lucene,我们在做项目的时候可能用不到lucene,但是用到的elasticsearch都是基于lucene的。非结构化数据:文档里面的内容,如word、excel、文本文档等。全文检索可以查询任意数据,包阔结构化数据和非结构化...

2019-10-02 18:32:32 225 3

原创 【java8新特性】stream流的方式遍历集合和数组

前言:在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为要进行遍历,但是遍历不是唯一的方式,遍历是指每一个元素逐一进行处理(目的),而并不是从第一个到最后一个顺次处理的循环,前者是目的,后者是方式。 所以为了让遍历的方式更加优雅,出现了流(stream)!1.流的目的在于强掉做什么假设一个案例:将集合A根据条...

2019-09-25 21:01:18 34240 15

原创 【linux】centos7.0下fastdfs上传图片报错 java.net.SocketTimeoutException: connect timed out的解决办法

这个应该是没有禁用防火墙导致的:所以关闭防火墙就好停止firewallsystemctl stop firewalld.service禁止firewall开机启动systemctl disable firewalld.service查看防火墙状态firewall-cmd --state最后是not running 表示禁用防火墙成功。现在重新启动系统,不会再报这个错误了。...

2019-09-23 18:24:47 677 4

原创 【mysql】解决mysql5.6解压版存入中文数据乱码问题(设置编码格式为utf-8)

1.情景再现刚刚在mysql数据库中插入的中文显示乱码:如下2.排查原因与解决办法(1)查看数据编码的格式是否都为utf-8输入下面语句,然后执行,show VARIABLES like '%char%';出现下图,发现在character_set_database 与character_set_server的编码方式为latin1,但是其余的为utf-8,但是我是想以utf-8存...

2019-09-17 21:31:15 424 4

转载 【MySQL 5.6压缩包版在Windows下配置安装详解】

Windows 下安装 MySQL 有两种方式,一种是下载安装包,根据提示一路 next 安装,不需要什么配置,比较简单;另一种是下载压缩包,通过命令和配置来安装,也不难,个人感觉更简单。本篇就采用第二种方法安装。1,下载MySQL压缩包1.1,打开https://www.mysql.com/,进入MySQL的官方网站,点击 Downloads,进入 下载中心1.2,在 下载中心...

2019-09-14 11:34:06 601 3

空空如也

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

TA关注的人

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