- 博客(68)
- 收藏
- 关注
原创 HashMap详解
Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。1、hashmap的数据结构要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用)所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链..
2021-01-25 22:53:46 531
原创 MYSQL索引面试常遇
1索引概念、索引模型我们是怎么聊到索引的呢,是因为我提到我们的业务量比较大,每天大概有几百万的新数据生成,于是有了以下对话:Q:你们每天这么大的数据量,都是保存在关系型数据库中吗?A:是的,我们线上使用的是MySQL数据库Q:每天几百万数据,一个月就是几千万了,那你们有没有对于查询做一些优化呢?A:我们在数据库中创建了一些索引-------Q:那你能说说什么是索引吗?A:索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据Q:那么索引具体采用的哪...
2021-01-25 22:32:42 178
原创 Redis6.0 特性解析
Redis的多路复用技术,支持epoll、kqueue、selector 5.0版本及以前,处理客户端请求的线程只有一个,串行处理 6.0版本引入了worker Thread,只处理网络IO读取和写入,核心IO负责串行处理客户端指令就在 2019 年 12 月 20 号这天,众所期待的 Redis 新版 6.0 rc1 发布了(Redis 6 RC1 is out today)肯定很多关注的同学都进行了试用,虽然因为引入了 c11 的 _Atomic 导致相当多的环境都无法直接编译成功,但是对.
2021-01-19 22:58:01 4431
转载 Redis I/O多路复用机制--单线程为什么这么快
Redis6.0之前是单线程模型首先我们要明确一个共识,我们通常所说的Redis单线程是指获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这个主线程就是我们平时说的"单线程",而其他的清理脏数据、无用连接的释放、LRU淘汰策略等等也是有其他线程在处理的,因此其实在Redis6之前的Redis本质上也是多线程的。为什么这些操作要放在同一个主线程中,官方给出的解释:传送门通常瓶颈不在 CPU,而是在内存和网络IO; 多线程会带来线程不安全.
2021-01-19 22:51:55 4864
原创 spring cloud组件:Hystrix服务熔断与服务降级
服务熔断与服务降级 服务熔断 服务雪崩:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。 雪崩效应:服务提供者因为不可用或者延迟高在成的服务调用者的请求线程,阻塞的请求会占用系统的固有线程数、IO等资源,当这样的被阻塞的线程越来越多的时候,系统瓶颈造成业务系统炎黄崩溃,这种现象成为雪崩效应 熔断机制:熔断机制是服务雪崩的一种有效解决方案,当服务消费者请求的服务提供者因为宕机或者网络延迟高等原因造车过暂时不能提供服务时,采用熔断机制,
2021-01-14 22:22:39 4624
原创 SpringCloud组件:Ribbon负载均衡
简单介绍 Ribbon还是那个当初租碟片营生起家的NetFlix公司研发发布的,并被SpringCloud集成到了项目中,当我们为Ribbon配置服务提供者的地址列表后,Ribbon就可以根据多种之一的负载均衡算法自动的去分配服务消费者的请求; 由于我们已经学习过了Feign,所以RestTemplate的负载均衡我记得之前的笔记中是有的,在返回RestTemplate到Spring容器的方法上加上一个@LoadBalanced注解即可实现,只是现在被我证实了,当我们使用Ribbon负载均衡后
2021-01-14 22:08:03 4445
原创 SpringCloud组件:OpenFeign远程调用
最开始我们RestTemplate,当时直连消费者和提供者,将请求路径写死在代码中,而且负载均衡只有自己手写,RestTemplate只能给我们提供远程调用的功能,后来我们加入了Eureka,作为一个中间人,利用Eureka的服务的注册发现和监控和负载均衡,通过Eureka客户端获取指定服务名的ip或者应用名+端口,动态拼接成url,外加上RestTemplate一起完成远程的调用,但你有没有发现RestTemplate这个包装类有点小问题,而且这样搞起来很麻烦 服务提供者有返回数据,但经过RestT
2021-01-14 21:59:47 4604
原创 Redis分布式锁的实现
一、什么是分布式锁?要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等
2021-01-14 21:42:07 4521
原创 spring boot利用JavaMail发送163邮件以及HTML类型邮件
引入依赖<!-- 邮件发送支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>1.5.9.RELEASE</version> </dependency>本身Javamail自带配
2020-11-19 15:08:33 455
原创 Hystrix熔断器
一、Hystrix简介Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性、容错性与局部应用的弹性,是一个实现了超时机制和断路器模式的工具类库。二、Hystrix的设计原则防止任何单独的依赖耗尽资源(线程)过载立即切断并快速失败,防止排队尽可能提供回退以保护用户免受故障使用隔离技术(例如隔板,泳道和断路器模式)来限制任何一个依赖的影响通过近实时的指标,监控和告警,确保故障被及时发现通过动态修改配置属性,确保故障及时
2020-11-18 10:41:50 1985
原创 Gateway中使用SpringSecurity进行网关鉴权与权限控制
需求设求众所周知,一切架构都必须按需求来设计,万能构架基本上是不存在的,即使是像Spring Security安全架构也只是实现了一个能用方式,并不是放之四海而皆准的,但是一个构架的良好扩展性是必须的,可以让使用者按照自己的需要进行扩展使用。所以为了说明本示例的实现,先假定这样一个需求1,需要有一个Web网关服务进行权限统一认证2,网关后面有一个用户管理服务,负责用户账号的管理3,网关后面还存在其它的服务,但是这些服务需要认证成功之后才能访问4,需要支持同一个请求可以被多个角色访问主要技能点说明
2020-11-16 14:15:12 14084 1
原创 SpringCloud微服务网关服务限流方案
在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方面是为了防止网络攻击。常见的限流方式,比如Hystrix适用线程池隔离,超过线程池的负载,走熔断的逻辑。在一般应用服务器中,比如tomcat容器也是通过限制它的线程数来控制并发的;也有通过时间窗口的平均速度来控制流量。常见的限流纬度有比如通过Ip来限流、通过uri来限流、通过用户访问频次来限流。一般限流都是在网关这一层做,比如Nginx、Openresty、kong、zuul、Spring Cloud
2020-11-16 11:37:33 5492
原创 把文件或者文件夹打包成jar
手动打包可以给任何文件夹打包,但是打包的文件夹中必须存在MANIFEST.MF文件,一般是在文件夹中有一个META-INF文件夹,在该文件夹中放MANIFEST.MF文件,如果没有,你可以创建META-INF文件夹并在里面创建MANIFEST.MF文件。我要打包的文件夹是image我们在要打包的文件夹所在的目录下执行命令,所以要把路径切换到文件所在盘符(我的此文件夹在E盘),然后输入命令:jar cvfm image.jar image\META-INF\MANIFEST.MF -C image
2020-11-16 11:13:39 9291
原创 微服务中的 API 网关(API Gateway)
以下是个人于搭建脚手架过程中的一些理念。SpringCloud微服务架构中,会使用到Zuul组件做边缘服务,即网关服务。那么可想而知,网关作为边缘服务,其承受的压力是最大的,当然是要考虑网关的高可用,那么就需要多个网关服务集群部署,从而达到高可用目的。层看到过“双重网关”的概念,不过目前不讨论这个,有兴趣的可以看双重网关。需求设求众所周知,一切架构都必须按需求来设计,万能构架基本上是不存在的,即使是像Spring Security安全架构也只是实现了一个能用方式,并不是放之四海而皆准的,但是一个构架的
2020-11-14 11:04:06 4822
原创 MySQL针对某个字段去重查询
select * from table group by name这样就会去重,默认会取出来每个分组的第一行数据。 如果SQL语句还有limit,order by等条件,必须放在group by后面。这样就达到了既去重,又能够输出更多字段信息的目的....
2019-11-12 10:46:04 7195 4
转载 Spring task定时任务执行一段时间后莫名其妙停止的问题
前因:一个项目,主要功能是用Spring task定时任务每天定时给工行发送清算并等待响应。执行了几个月一直没有问题,前几天,莫名其妙的突然不再发送清算数据了。只好花费一些时间来查看到底是什么原因造成的。在日志中可以看到执行了30(假定值)次后,突然不在往下执行了。此时的服务已经执行了好几个月了。问题分析:因为步骤1中的代码,全部放在了try{}catch(){}代码快中,如果...
2019-09-16 09:54:08 5685
原创 mybatis多参数传递到Mapper.xml中
Mybatis传多个参数(四种解决方案)据我目前接触到的传多个参数的方案有三种。第一种方案:一个一个参数传递DAO层的函数方法User selectUser(String name,String area);对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> SE...
2019-09-11 10:36:26 4664
原创 Spring中DataIntegrityViolationException异常介绍
在使用Spring的时候,经常碰到的一个异常是:DataIntegrityViolationExceptio。这个异常是当插入、删除和修改数据的时候,违背的数据完整性约束抛出的异常。例如:主键重复异常等。...
2019-09-11 10:23:39 12236
原创 java.lang.NoClassDefFoundError: com/chinahotelhelp/shm/businessmanagement/module/order/entity/Order
出现如题异常时,将spring-test.jar,spring-web.jar,spring-webmvc.jar添加到工程中。
2019-09-11 10:17:08 162
原创 springboot多数据源遇到jdbcUrl is required with driverClassName.
**2019-08-15 19:34:00.026 ERROR 17140 — [pool-3-thread-1] com.zaxxer.hikari.HikariConfig : HikariPool-1 - jdbcUrl is required with driverClassName.2019-08-15 19:34:00.028 ERROR 17140 — [po...
2019-08-15 19:42:57 674
原创 ftp下载完成后卡在ftpClient.completePendingCommand();
下载完成后,若有 boolean upNewStatus = ftpClient.completePendingCommand();,到此会停住不往下执行,必须重启,否则不会往下执行 * There are a few FTPClient methods that do not complete the * entire sequence of FTP commands to...
2019-07-05 14:03:13 8241 4
原创 java调用cmd执行命令遇到有空格路径解决
在执行路径的前后加上引号:Process process = Runtime.getRuntime().exec("cmd /c start " + "\"\" \"" + locationCmd + "\"");
2019-07-05 13:56:43 2984 2
原创 垃圾收集器的内存回收机制
前言对于垃圾收集器回收内存应该有以下几点思考:哪些内存需要回收? 什么时候被回收? 如何回收?哪些内存需要被回收?在Java内存运行时区域中,虚拟机栈、本地方法栈、程序计数器3个区域随线程而生,随线程而亡。所以它们不需要垃圾收集器来管理。而堆和方法区则不一样,堆中存放的对象实例和方法区中的内存只有在运行期间才知道,这部分内存的分配和回收都是动态的,垃圾收集器关注的就是这部分内...
2019-03-15 17:23:03 4458
转载 出现身份验证错误,要求的函数不受支持,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正
近期window 10更新后,远程桌面连不到服务器了网上有卸载补丁,修改组策略什么的,对不起我没看到这个补丁,家庭版没有组策略常规方法也就是三种,1.卸载更新补丁,2.修改组策略安全机制,3.修改注册表本人只介绍修改注册表,简单方便快捷开始-->运行-->regedit打开注册表进入这个目录\HKEY_LOCAL_MACHINE\SOFTWARE\Micro...
2019-03-07 14:55:24 172
原创 java.util.LinkedHashMap cannot be cast to ……;errorCode:5010000!
反复验证发现:由于请求过来的是jsonrefund.getData()这个方法获取到的并不是实体类,而是Map有了原因当时想到的法子是吧map转成json,然后把json转成相应的实体类,方法如下:Payment data = JSON.parseObject(JSON.toJSONString(refund.getData()),Payment.class);...
2019-03-01 11:20:35 1849
原创 Spring获取日期时间差8小时问题解决
默认情况下在使用spring的@ResponseBody返回json串时,如果有日期类型的数据,会发现在日期会莫名其妙的差8小时经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟 国内应该是相差8小时,所以再时间换算上自动减去(加上)了8小时在spring boot的yml文件中配置spring: jacks...
2019-01-26 10:33:37 5595
原创 SpringCloud客户端Client启动时自动停止
2018-05-30 18:07:39.932 INFO 7912 — [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_UNKNOWN/OnePiece: registering service… 2018-05-30 18:07:39.948 INFO 7912 — [ main] com.z...
2019-01-24 14:43:49 503
原创 springMVC+rabbitMQ+websocket消费者与生产者实例
首先导入依赖:<!-- 添加MQ依赖 --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.5.1</version>
2019-01-24 10:27:08 5196
原创 Error creating bean with name ‘jsonMessageConverter‘: Failed to introspect bean class [org.springfr
Error creating bean with name 'jsonMessageConverter': Failed to introspect bean class [org.springframework.amqp.support.converter.Jackson2JsonMessageConverter] for lookup method metadata: could not f...
2019-01-23 11:58:24 4898
转载 谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛...
2019-01-21 14:11:20 4403
转载 Java并发编程:4种线程池和缓冲队列BlockingQueue
一. 线程池简介1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。2. 线程池的工作机制 2.1 在线程池的...
2019-01-21 13:46:32 4488
转载 java基础增强
1. 静态导入和自动装箱拆箱(1).静态导入: 导入java里面类的静态成员 import static 包名 类名 静态属性/静态方法/*(2).自动装箱拆箱:自动装箱:把基本数据类型赋值给对应的包装类(对象)自动拆箱:把包装类的对象赋值给对应的基本数据类型package com.study.lgs;import static java.lang.System.out;im...
2019-01-19 16:56:46 4597
原创 spring boot打jar包放到linux云服务器运行
在本地打好jar之后使用Xftp上传到Linux,使用Xshell窗口命令运行jar文件(打包见spring boot打jar包博客),必须确定服务器已经把你需要的端口号开启。首先查看一下在运行的jar文件如果有相同的jar文件在运行,且是同事和自己都不需要的则可以直接杀死而后就可以直接nohup命令运行jar文件了 在运行命令最后加上 & 就是窗口关闭后依...
2019-01-19 10:15:33 305
原创 Intellij IDEA基于Springboot的远程调试
所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。方法首先,打开Edit configurations,点击+号,创建一个Remote应用。 填写name,配置Host地址(远程服务器地址)和端口(选一个未被占用的端口)。然后...
2019-01-18 18:26:05 4533
转载 TCP网络编程
一、网络的七层模型 从下往上依次是物理层(电路,布线)-数据链路层(交换机)-网络层(tcp/ip,路由器)-传输层-会话层-表示层(编码,解码,加密,解密,压缩,解压缩)-应用层(http),但是tcp/ip模型是网络接口层-网络层-传输层-应用层二、三次握手和四次挥手(详解见另一篇TCP详解博文) 1. 三次握手: (1) 客户端向网络服...
2019-01-18 14:20:17 2442
转载 TCP三次握手及四次挥手详解
TCP的报头:1. 源端口号:表示发送端端口号,字段长为16位。 2. 目标端口号:表示接收端口号,字段长为16位。 3. 序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。 注意:序列号不会从0或1开始,而是在建立连接时由计算机生成的一个随机数作为其初始值,通过SYN包发送给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。...
2019-01-18 14:09:04 127
转载 Java IO与NIO
一、文件的概念以及文件基本函数的操作 1. 什么是文件:文件可认为是相关记录或放在一起的数据的集合 2. File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容。 3. File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。 4. Java中目录被看成是一个特殊的文件。List()方法可以返回目录中所有的子目录和文件。...
2019-01-17 18:30:17 2963
转载 java线程
一、线程的概念进程是正在执行的程序。在操作系统中进程是进行系统资源分配、调度和管理的最小单位,进程在执行过程中拥有独立的内存单元。比如:Windows采用进程作为最小隔离单位,每个进程有属于自己的数据段、程序段 ,并且与别的进程没有任何关系。一个或更多的线程构成了一个进程(操作系统是以进程为单位的,而进程是以线程为单位的,进程中必须有一个主线程)。为了解决进程调度资源的浪费,为了能够共...
2019-01-17 15:18:26 2953
转载 Java反射
一、什么是反射 java程序在运行期间能够动态加载、解析、使用一些在编译阶段并不确定的数据类型 二、反射的功能 2.1、加载运行时才能确定的数据类型 2.2、解析类的结构,获取内部信息 2.3、操作该类型或其实例:访问属性、调用方法、创建新对象package com.study.test;import static j...
2019-01-17 14:36:25 2955
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人