- 博客(33)
- 收藏
- 关注
原创 消息中间件
如何保证消息不被重复消费消息重复消费的话其实就是考虑怎么保证系统的一个幂等性。这个其实还是得结合业务来说吧,比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入了,update 一下好吧。比如你是写 Redis,那没问题了,反正每次都是 set,天然幂等性。比如你不是上面两个场景,那做的稍微复杂一点,你需要让生产者发送每条数据的时候,里面加一个全局唯一的 id,类似订单 id 之类的东西,然后你这里消费到了之后,先根据这个 id 去比如 Redis 里查一下,之前消费过吗?如果没
2020-07-30 11:47:18
199
原创 前端总结
1、你知道jquery中的选择器吗,请讲一下有哪些选择器?基本选择器:id 选择器,标签选择器,class 选择器。层次选择器:比如根据父元素匹配所有的子元素。过滤选择器:根据过滤规则进行元素的匹配,写的话,以冒号开头 比如说 $(“tr:first”) $("tr:last),就是获取tr的第一个元素和最后一个元素表单选择器:$(":checkbox")就是获取所有的复选框。2、 在jquery中你是如何去操作样式的?addClass 来添加样式removeClass来移除样式toggle
2020-06-20 11:29:35
221
原创 Spring事务传播行为
1、什么是事务的传播行为?就是多个事务方法相互调用时,事务如何在这些方法间传播。Propagation.REQUIRED 如果当前没有事务就新建一个事务,如果已经存在一个事务,就加入到这个事务中, 最常用的Propagation.REQUIRED_NEW 新建事务,如果当前存在事务,就把当前事务挂起。2、@Transactional属性详解propagation 配置事务的传播行为isolation 配置事务的隔离级别 一般用默认值rollbackFor 配置事务回滚的异常类型time
2020-06-16 22:52:58
152
原创 分布式锁
1、常见的分布式锁的实现方式1、基于数据库,2、基于Zookeeper,3、基于Redis实现分布式锁,因为Redis是单线程,所以命令会以串行的方式执行,还提供了SETNX这样的指令,本身具有互斥性。1、基于Redis 实现分布式锁,解决缓存击穿,用Redis 的setnx指令,给key设置一个值,同时为了避免死锁,还要给key设置一个过期时间,如果当前key不存在,返回一个"OK",就会设置成功,当前线程就拿到了这把锁,假如过期时间设置了10s,那个这个线程就有权在10s内访问数据库,重新构建
2020-06-15 16:47:09
148
原创 微服务面试题
1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和SpringCloud的理解5、分布式系统面临的问题6、什么是服务熔断,什么是服务降级7、微服务的优缺点分别是什么?说下你在项目开发中碰到的坑?8、你所知道的微服务技术栈有哪些?请列举一二9、什么是 Eureka服务注册与发现10、Eureka的基本架构是什么?11、作为服务注册中心,Eureka比Zookeeper好在哪里?12、什么是 Ribbon负
2020-06-14 22:14:27
433
原创 事务、分布式事务
1、本地事务通过关系型数据库的事务特性来控制事务,就叫本地事务。事务是什么?事务是数据库操作的最小工作单元,一些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。事务的基本要素(四个特性)?原子性:就是不可再分,事务中的所有操作要么都执行,要么都不执行。一致性:事务开始前和开始后,数据库的完整性约束没有被破坏。隔离性:并发执行的各个事务之间不能互相干扰,就是一个事务不能看到其他事务执行过程中的中间状态。持久性:事务完成后、事务对数据库的所有更新将被保存到数据库,不能回滚。事务的并发
2020-06-09 22:49:22
296
原创 SpringCloud 组件之Eureka
1、zookeeper和eureka的区别在哪?Zookeeper 遵守CP原则,要保证数据的一致性,在读取数据的时候,要先与master节点同步一下数据,但是一旦master节点因为网络故障与其他节点失去联系时,剩余节点要重新进行选举,问题在于,选举期间整个zookeeper集群都是不可用的,就会导致在选举期间注册服务不可用。Eureka遵守AP原则,要优先保证可用性,Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,只要有一台Eureka还在,就能保证注册服务可用,只不过查到的信息
2020-06-08 22:16:37
127
原创 Mybatis总结
1、嵌套查询与嵌套结果查询的区别。嵌套查询,它要用association或者collection标签,中有个select属性,进行嵌套查询, 会有一个N+1问题,要查询数据库好多次。嵌套结果:就可以根据ResultMap中的映射,发一条sql就可以把结果查出来。2、Mybatis中#{} 和${} 的区别?#{} 是sql的参数占位符,它会使用PrepareStatrment预编译的方式将参数设置到sql语句中,传入的内容会被作为字符串,加上引号,可以防止sql注入。${} 传入的内容会直接拼接在
2020-06-02 20:10:19
116
原创 NIO
IO和NIO的区别?IO是面向字节流的, NIO是面向缓冲区的IO是阻塞IO,NIO是非阻塞IO缓冲区Buffer的四个核心属性capacity: 容量,表示缓冲区最大存储数据的容量。limit:界限,表示缓冲区可以操作数据的大小。position:位置,表示缓冲区中正在操作数据的位置。mark: 标记,表示记录当前position的位置。可以通过reset恢复到mark的位置。直接缓冲区和非直接缓冲区的区别非直接缓冲区:通过allocate()方法在jvm内存中分配缓冲区,直接缓冲区:
2020-05-25 23:23:28
161
原创 Mysql 练习题
1、查询01课程比02课程成绩高的学生信息及课程分数SELECT*FROMstudent sJOIN sc a ON s.SId = a.SIdjoin sc b on s.sid=b.sid and a.cid=01 and b.cid=02where a.score>b.score;
2020-05-18 23:12:28
1040
1
原创 面试题2
1、栈和堆的区别?堆是存储实例对象的内存区域,栈是存储线程内 类方法运行状态的内存区域,当调用类方法时,与方法有关类变量和方法内部的局部变量都会存储到栈帧,当这些类变量和局部变量是对象引用变量时,这些变量会指向堆中的实例对象,方法执行完成后,与方法相关的栈帧被弹出栈,栈帧占用的存储空间被释放,但堆中的实例对象并没有释放。2,为什么要有 hashCode?用hashmap的存储过程来说,当一个对象要加入hashmap的时候首先会用key的hashcode方法结合数组长度,计算出索引值,如果当前数组索引已
2020-05-14 16:36:19
150
原创 Bean的初始化方式
@PostConstruct注解标在方法上,实现InitialzingBean接口,重写AfterProperties方法,@Bean(initMethed=“”)制定指定方法
2020-04-05 23:34:23
178
原创 CountDownLatch和枚举Enum的用法
public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6); for (int i = 1; i <= 6; i++) { new Thread(()-...
2020-03-12 15:51:25
175
原创 Volitile、JMM、CAS、原子类、锁面试总结
一1.jvm提供的轻量级的同步机制:{1.保证可见性2.不保证原子性3.禁止指令重排可见性:及时通知其他线程,主物理内存的值已经被修改。原子性:不可分割,保证数据的完整和一致性,要么同时成功要么同时失败怎么解决volatile不保证原子性,用juc包下的atomic指令重排:多线程环境下线程交替执行,由于编译器优化重排,多个线程中使用的变量能否保证一致是无法确定的。单利模...
2020-03-11 22:57:20
215
原创 Jvm面试题总结
一、类加载器1、 什么是类加载器?加载java类到java虚拟机的内存空间中。2、Jvm有哪几种类加载器启动类加载器、扩展类加载器、应用程序类加载器、用户自定义类加载器3、双亲委派模型?如果一个类收到了类加载请求,它不会自己先去加载,而是把这个请求委托给父类加载器去执行,如果父类加载器还存在其父类加载器,就进一步向上委托,请求最终到达顶层的启动类加载器,当父类加载器在自己的搜索范围内找...
2020-03-11 18:30:43
203
原创 集合类不安全
public class NoSelfDemo3 { public static void main(String[] args) { //List<String> list = new ArrayList<>(); //List<String> list = Collections.synchronizedList(n...
2020-03-10 18:53:04
124
原创 线程和进程的区别是什么
进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒度大小不同。进程的颗粒度太大,每次都要有上下文的调入、保存、调出。也就是说线程是共享了进程的上下文环境,更为细小的CPU时间段。进程就相当于火车,线程就相当于车厢new 创建Runnable 就绪blocked 阻塞waiting 等待timed_waitingterminated 终止...
2020-03-10 16:17:06
145
原创 负载均衡 nginx和ribbon
LB(LoadBalance)是什么就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用。ribbon本地负载均衡VsNginx服务端负载均衡Nginx是服务端负载均衡,客户端所有请求都会交给Nginx,然后由Ngxin实现转发请求。Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上货去注册信息服务列表后缓存到jvm本地,从而在本地实现RPC远程调用服务技术。Ribb...
2020-03-09 23:07:51
936
原创 虚拟机栈基本内容
如果这个内部变量是内部产生,内部消亡的,就是线程安全的,不是内部产生的,或者又给return到外面,生命周期没有结束,就是不安全的...
2020-03-08 16:48:10
149
原创 Spring boot + shiro 跨域失效
在springboot中解决跨域有好几种方式:1.使用@crossorigin 注解2.实现WebMvcConfigurer,重写addCorsMappings方法这两种方法在springboot中都能解决跨域的问题,但在整合shiro后,跨域就是失效了。因为shiro的过滤器会在跨域处理之前执行,这就导致未经允许跨域的请求先到达shiro过滤器,这样就会出现跨域错误。解决方案使用Fi...
2020-03-04 13:40:07
1306
2
原创 应用程序使用Shiro
最简单的一个Shiro应用:1.通过Subject来进行认证和授权,而subject又委托给SecurManager;2.我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。...
2020-03-02 13:24:01
165
原创 SpringMVC拦截器Interceptor导致跨越cors失效,Header获取不到
起因:String authorization = request.getHeader("Authorization");在拦截器中获取header中的Authorization 为空,但postman测试正常前端报跨域错误,controller中已经配置了@CrossOrigin.项目采用前后端分离,服务器端添加了全局的跨域配置,但是却出现了跨域问题,分析了多次请求发现有一部分请求并没...
2020-03-01 22:25:09
2134
2
原创 常见的认证机制
4.1 HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTT...
2020-03-01 13:22:11
154
原创 成员变量和局部变量
就近原则变量的分类成员变量:类变量、实例变量局部变量非静态代码块的执行:每次创建实例对象都会执行方法的调用规则:调用一次执行一次局部变量与成员变量的区别声明的位置局部变量:方法体{} 中,形参,代码块中成员变量: 类中 方法外类变量:有static 修饰实例变量: 没有static修饰修饰符局部变量: final成员变量:pu...
2020-02-14 19:17:48
80
原创 JAVA 类的初始化顺序
在不考虑父类的情况下,创建类的对象的时候先初始化静态变量和静态代码块(静态变量和静态代码块的初始化顺序按照在类中的先后顺序),然后再初始化非静态变量和非静态代码块(非静态变量和非静态代码块之间也是按照在类中的先后顺序),如果非静态变量未显式赋值会被赋值为默认值。最后执行构造函数。对于静态成员只会初始化一次,所以已经被初始化之后就不会再次执行。静态成员变量和静态代码块不仅会在初始化对象时才...
2020-02-14 19:05:13
73
原创 使用JAVASCRIPT SDK进行视频上传
一、问题分析1、将视频上传至tomcat的问题(1)首先将视频上传至tomcat,然后将tomcat临时文件夹中的视频再上传至阿里云服务器,单个视频的上传时间过长。(2)上传的过程中是阻塞的,http请求等待上传至阿里云成功后才向客户端返回响应,客户端请求容易超时(3)上传进度条表示的是本地上传至微服务的tomcat服务器的进度,不是完整的上传进度2、使用客户端上传 开发参考https...
2020-02-14 16:25:24
518
原创 INVALID BOUND STATEMENT 异常解决
问题分析dao层编译后只有class文件,没有mapper.xml,因为maven工程在默认情况下src/main/java目录下的所有资源文件是不发布到target目录下的,解决方案pom中配置如下节点<!-- 项目打包时会将java目录中的*.xml文件也进行打包 --><build> <resources> <re...
2020-02-14 16:00:32
361
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人