![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言
文章平均质量分 85
公众号【Java大蜗牛】
这个作者很懒,什么都没留下…
展开
-
阿里面试题:如何解决缓存常见的坑?
为什么使用缓存在高并发请求时,我们会频繁提到使用缓存技术,最直接的原因是,磁盘IO及网络开销是直接请求内存IO的千百上千倍做个简单计算,如果我们需要某个数据,该数据从数据库磁盘读出来需要0.0045S,经过网络请求传输需要0.0005S,那么每个请求完成最少需要0.005S,该数据服务器每秒最多只能响应200个请求,而如果该数据存于本机内存里,读出来只需要100us,那么每秒能够响应10000个请求。通过将数据存储到离CPU更近的未位置,减少数据传输时间,提高处理效率,这就是缓存的意义。...原创 2021-05-27 13:49:33 · 270 阅读 · 1 评论 -
实战级详解Spring框架中引入阿里开源组件Nacos作配置中心
Nacos的配置中心先来聊聊配置中心是什么,以及为什么要使用配置中心。简单的说,配置中心是可以集中、灵活、动态的管理系统中的各种配置参数的配置管理产品,例如增、删、改、查功能开关、数据库连接配置、服务请求地址等。所谓集中,就是有统一管理的平台;灵活,不需要修改代码,做到自动匹配赋值、配置隔离;动态,不需要通过重启服务来使变更生效,主动推送或拉取变更的值。对于配置参数,早期很传统的做法是通过程序硬编码的方式,将参数值写到代码中,如果要改变参数值,不仅要修改代码,还需要重新部署。重新部署倒是勉强可以接受原创 2021-05-26 22:05:59 · 684 阅读 · 3 评论 -
牛逼!从0到1用Java实现-Redis分布式锁。
1、为什么要使用分布式锁如果在一个分布式系统中,我们从数据库中读取一个数据,然后修改保存,这种情况很容易遇到并发问题。因为读取和更新保存不是一个原子操作,在并发时就会导致数据的不正确。这种场景其实并不少见,比如电商秒杀活动,库存数量的更新就会遇到。如果是单机应用,直接使用本地锁就可以避免。如果是分布式应用,本地锁派不上用场,这时就需要引入分布式锁来解决。由此可见分布式锁的目的其实很简单,就是为了保证多台服务器在执行某一段代码时保证只有一台服务器执行。2、为了保证分布式锁的可用性,至少要...原创 2021-05-26 15:25:49 · 237 阅读 · 0 评论 -
搞定Tomcat服务配置和服务器优化只需看这一篇文章就够了!
一、Tomcat内存优化① tomcat启动脚本Tomcat内存优化其实也就是JVM优化,启动时告诉JVM需要多大内存(调优内存是最直接的方式)。配置文件为Windows 下的 catalina.bat,Linux 下的 catalina.sh。在linux启动Tomcat通常我们会执行bin/startup.sh文件,查看该文件源码会发现,该文件最后会执行catalina.sh脚本文件。在catalina.sh脚本文件中,会看到如下注释变量释义:该脚本注释说明了一些CATALINA Serve原创 2021-05-25 19:39:25 · 440 阅读 · 1 评论 -
美团面试题:被问缓存一致性,我的这个回答直接让面试官刮目相看!
美团面试题:被问缓存一致性,我的这个回答直接让面试官刮目相看!文末附面试资料~方案分析更新缓存策略方式常见的有下面几种:先更新缓存,再更新数据库先更新数据库,再更新缓存先删除缓存,再更新数据库先更新数据库,再删除缓存下面一 一介绍!方案一:更新缓存,更新数据库这种方式可轻易排除,因为如果先更新缓存成功,但是数据库更新失败,则肯定会造成数据不一致。方案二:更新数据库,更新缓存这种缓存更新策略俗称双写,存在问题是:并发更新数据库场景下,会将脏数据刷到缓存updateDB();upda原创 2021-05-24 14:05:20 · 245 阅读 · 0 评论 -
面试被虐后,我忍痛把JVM调优原理的知识和经验分享了出来!
前言:先了解原理,然后在进行调优。一定要记住的是任何的调优都不是一蹴而就,不要指望改动一个参数就达到调优的目的,也不要仅仅改动了一个参数,就认为是做了调优。调优是在已有的资源和要达到的目标的前提上,进行权衡。从类加载到整个JVM的运行周期内大致流程和结构如下:从上图可以看到,JVM 可以划分为这些部分:执行引擎,包括:GC、JIT 编译器类加载子系统,这部分的问题,一般在开发过程中出现JNI 部分,这部分问题一般在 JVM 之外运行时数据区;Java 将内存分为 2 大块:堆内存和栈内原创 2021-05-21 14:56:07 · 264 阅读 · 2 评论 -
问:高并发场景下,如何保证数据的一致性的?
面试的时候,总会遇到这么一个场景。1. 场景分析面试官:你们的服务的QPS是多少?我:我们的服务高峰期访问量还挺大的,大约是3万吧。面试官:这么大的访问量,你们的服务器能撑住吗?有加缓存吗?我:有的,我们使用了Redis做缓存,接口优先查询缓存,缓存不存在,才访问数据库。这样可以减少数据库访问压力,加快查询效率。面试官:一份数据存储在两个地方,更新数据的时候,你们是怎么保证数据的一致性的?看到了吧,好的面试官一般不直接问你数据一致性的解决方案,而是循循善诱,结合具体的使用场景,再问你解决方法.原创 2021-05-15 17:37:08 · 1499 阅读 · 0 评论 -
厉害了!阿里大佬把 HashMap 剖析得只剩渣渣了
前言HashMap是一个非常重要的集合,日常使用也非常的频繁,同时也是面试重点。本文并不打算讲解基础的使用api,而是深入HashMap的底层,讲解关于HashMap的重点知识。需要读者对散列表和HashMap有一定的认识。HashMap本质上是一个散列表,那么就离不开散列表的三大问题:散列函数、哈希冲突、扩容方案;同时作为一个数据结构,必须考虑多线程并发访问的问题,也就是线程安全。这四大重点则为学习HashMap的重点,也是HashMap设计的重点。HashMap属于Map集合体系的一..原创 2021-05-15 13:48:28 · 160 阅读 · 0 评论 -
笔试必备,8种排序算法的Java实现,附标准答案!
一、Java版希尔排序(缩小增量排序)复杂度 平均 O(n^1.3) 最好O(n) 最差O(n^s)[1内循环通过模拟并行的方式完成分组的内部直接插入排序,而不是一个一个分组分组的排,在10w的随机数据20w的随机数据均表现优异。public void shellSort(int[] a) { if (null == a || a.length < 2) { return; } for (int d = a.length/2; d > 0; d/=2) { // 从1原创 2021-05-08 20:53:49 · 298 阅读 · 1 评论 -
分布式session的几种解决方案,你中意哪种?
前言:我发现了一个商城,我还没有登录,就可以往购物车中添加商品,加了好几件后,我准备付款,需要我先去登录,登录完之后付款。现在很多商城,都会要求用户先去登录,登录之后再往购物车中添加商品,这样用户、购物车、商品,三个对象之间就有了绑定关系。而针对我最开始说的那种情况,其实就是基于session做的,客户端往购物车中添加第一个商品的时候,发送一个请求,服务器收到请求之后,创建session,然后返回当前session对应的一个JessionId,浏览器存储在cookie中,客户端往购物车...原创 2021-05-08 13:42:48 · 460 阅读 · 0 评论 -
Java面试:BIO,NIO,AIO 的区别,别再傻傻分不清楚
既然你能看到这,说明你有一定的Java基础了,不然咋面试呢?同步&异步, 阻塞&非阻塞 基本了解同步(阻塞): 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步(非阻塞): 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果BIO: (Blocking I/O) - 阻塞IO也叫传统IO1) 先将文件内容从...原创 2021-05-06 14:09:50 · 454 阅读 · 0 评论 -
字节一二三面,面经(已经OC)四月底真实面试经历!
一面:自我介绍,简单问了下项目实现流程,算法题1:然后函数计算n以内三的倍数和五的倍数和,开始写了时间复杂度O(n),面试官说不行,然后优化到了时间空间都是O(1):算法题2:最长无重复子串长度,一遍过力扣原题算法题3:SQL,由于我准备面试忘记准备SQL了,只会简单查询,这个需要左链接子查询直接放弃mysql索引:B+树,哈希索引,聚簇索引,非聚簇索引集合类:set,list,map,然后到了HashMap,TreeMap实现原理,然后到了红黑树实现原理和优点,然后到Con..原创 2021-05-05 14:13:40 · 651 阅读 · 0 评论 -
什么,你管这叫“线程安全”?
前言:1.什么叫线程安全?2.线程安全与变量的关系?变量又与堆/栈/静态存储区有密切关系什么叫线程安全?我们以常见的一行代码i++ ,i-- 为例, 计算机的操作姿势可能与你想象的不一样。在大多数计算机中, 给变量自增并不是原子操作, 需要下面三步:① 将变量值加载进寄存器② 寄存器自增/自减值③ 将寄存器值加载回原变量多线程环境下,如果你不使用一些原子锁操作:线程A ( i++ )可能只执行了前面两步后,之后CPU轮询切换到其他线程或者线程A被抢占CPU; 线程B ( i-- )欻.原创 2021-04-30 14:58:16 · 187 阅读 · 2 评论 -
【2021最新】Spring 全家桶:Java之Sping MVC SpringBoot常见面试题总结,附答案解析!
Spring 全家桶100问,常见面试题总结,一共分为三篇 上 中 下,本篇为上篇!一,Spring boot 有哪些方式可以实现热部署?使用 devtools 启动热部署,添加 devtools 库,在配置文件中把 spring. devtools. restart. enabled 设置为 true; 使用 Intellij Idea 编辑器,勾上自动编译或手动重新编译。 109.jpa 和 hibernate 有什么区别? jpa 全称 Java Persistence API,是...原创 2021-04-28 15:49:10 · 354 阅读 · 0 评论 -
记录一下,我的「Java」面试日记!
背景:在老东家五年了,总共工作整八年,经历两家公司。2020-10-31日离职。公司规模较小,项目压力不大,非985/211毕业,统招本科,计算机专业。目标:中大型公司,最好是大厂,嘿嘿,不过不抱希望,毕竟背景不太好。准备:撰写简历,每天下班回家 7-12点看视频,刷博客,看面试题。学习内容:《某某课堂》学习视频。准备内容:Java 基础,集合,线程池,锁,MySQL索引,事务,Spring等。2020-10.31提了离职已经有二十多天了,今天老板签了字,办了离职手续,《某...原创 2021-04-27 21:30:36 · 903 阅读 · 9 评论 -
拜托,不要再问我Java需要学到什么程度才能找到工作了
前言:最近有很多粉丝朋友私信我,说找工作太难了,Java需要学到什么程度才能找到工作,这不 我针对了企业用人需求 做了个技术栈,基本上掌握个70%以上就能找到一个不错的开发工作,技术栈如下:一:Java基础-语言语法数据类型运算符流程控制方法的定义,调用,重载数组二:面向对象继承封装多态三:JavaSE进阶异常常用类集合IO流多线程网络编程JUnit枚举注解反射机制四:数据库+JDBCOeacle+MyQSL+JDBC...原创 2021-04-26 17:42:59 · 495 阅读 · 1 评论 -
MySQL是如何和系统打交道的?
前言作为一名开发人员,了解和学习数据库为重中之重。系统和mysql的连接通道要在Java系统和MySQL之间建立联系,需要用到MySQL的连接驱动 mysql-connector-java ,所以在项目的依赖中我们常常会发现加入的 mysql-connector-java 连接驱动。mysql-connector-java 职能底层实现 程序 与 mysql 服务器的网络连接。数据库连接池当一个用户对数据库进行操作时,程序就会和数据库建立一次连接。当多个用户同时对数据库进行操作时,而程序和数原创 2021-04-24 14:45:28 · 133 阅读 · 0 评论 -
腾讯大佬把Redis进阶笔记分析的淋漓尽致!
一、Redis 基础数据结构StringRedis 里的字符串是动态字符串,会根据实际情况动态调整。类似于 Go 里面的切片-slice,如果长度不够则自动扩容。至于如何扩容,方法大致如下:当 length 小于 1M 的时候,扩容规则将目前的字符串翻倍;如果 length 大于 1M 的话,则每次只会扩容 1M,直到达到 512M。1. StringRedis 里的字符串是动态字符串,会根据实际情况动态调整。类似于 Go 里面的切片-slice,如果长度不够则自动扩容。至于如何扩容,方法大致如下原创 2021-04-22 17:14:45 · 211 阅读 · 0 评论 -
万字长篇,图文并茂!一篇与面试官和蔼交流的深入了解JVM(JDK8)果断收藏了!
文章目录面试系列1、类加载机制类加载过程分为 加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载1、加载 在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口2、验证 校验字节码文件的正确性3、准备 给类的静态变量分配内存,并赋予原创 2021-04-21 19:25:37 · 248 阅读 · 1 评论 -
架构大佬硬核解析 M1 上如何使用 Docker
前言出于开源项目的需要,我准备把之前在 Windows 下运行的开源项目移植到 Mac 上跑得试下,但是之前 Mac M1 芯片并不能很好地支持 Docker,这不,发现 Docker 也正式支持 Mac 了,M1 看了 Docker 的芳容,竟悄悄爱上了 Docker。本文主要内容如下:一、官宣1.1 官宣版之前 Docker 只支持在 Intel 芯片的 X86 架构上运行,Docker 已经正式支持苹果 M1 芯片了,而 M1 芯片是 ARM 架构的,所以说 D...原创 2021-04-21 16:25:08 · 1452 阅读 · 0 评论 -
8张图,5大组件!了解MySQL查询语句执行过程。
开篇相信广大程序员朋友经常使用MySQL数据库作为书籍持久化的工具,我们最常使用的就是MySQL中的SQL语句,从客户端向MySQL发出一条条指令,然后获取返回的数据结果进行后面的逻辑处理。尽管大家经常使用SQL语句完成工作,你是否关注过其执行的阶段,利用了哪些技术完成?今天,就带大家一起看看MySQL数据库处理SQL请求的全过程。下面将会讲述如下内容:查询请求在MySQL中的处理流程MySQL 中处理SQL的组件介绍,包括:连接器查询缓存分析器优化器执行器查询请求的执行流程众所周知原创 2021-04-20 21:32:57 · 334 阅读 · 0 评论 -
推荐!【2021最新版】Java面试真题手册:面试题(1000道)+Java集合/泛型+IO与NIO+多线程&并发+ JVM+Mysql+Redis+MongoDB+ssm等,面试大全!!!
金三银四接近尾声!!!!最近面试的小伙伴很多,对此我整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微原创 2021-04-19 21:50:26 · 225 阅读 · 0 评论 -
RabbitMQ 中 7 种消息队列
七种模式介绍与应用场景简单模式(Hello World)做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B应用场景:将发送的电子邮件放到消息队列,然后邮件服务在队列中获取邮件并发送给收件人工作队列模式(Work queues)在多个消费者之间分配任务(竞争的消费者模式),一个生产者对应多个消费者,一般适用于执行资源密集型任务,单个消费者处理不过来,需要多个消费者进行处理应用场景:一个订单的处理需要1...原创 2021-04-19 17:03:58 · 327 阅读 · 0 评论 -
超级详细的Spring Boot 注解总结,看过来
文章目录 1、@SpringBootApplication 2、@EnableAutoConfiguration 3、@Configuration 4、@SpringBootConfiguration 5、@ComponentScan 6、@Conditional 7、@ConditionalOnBean 8、@ConditionalOnMissingBean 9、@ConditionalOnClass 10、@Conditiona...原创 2021-02-22 22:05:06 · 241 阅读 · 0 评论 -
为什么工厂模式可以解耦?下篇
1、回顾(一)上节我已经基本说明了耦合,以及在一些业务上是怎么发生的,实际上我们要理解一个思想,传统的EJB开发模式,因为受到了很多很多的框架硬性约束,web容器的约束导致了代码的可读性,可移植和可扩展性变得不好,所以有这些解耦的思想,我们才会在03年spring的广泛流行!回顾上节末尾:我们是不是遗留了一个问题,如果我们在工厂中,每次有一个新的对象,我们就需要手动的加一个对应的getBean方法,可重用性大大降低,所以我们称下面的代码,叫做-------------------...原创 2021-02-19 13:30:29 · 139 阅读 · 0 评论 -
为什么工厂模式可以解耦?why?
1、聊聊解耦?耦合:代码之间的关联关系称为耦合,具有强关联关系的称为强耦合。解耦:解除代码之间的关联关系,使每个业务代码职责单一,目的明确,通常我们在业务上称为解耦。2、代码示例我们以传统的EJB开发模式为例子,先不以框架展示,大家可以看看一些改代码难受的场景。业务来了:我需要把一段数据保存到mysql数据库中,按照分层逻辑实现(controller,service,dao)Dao接口层:publicinterfaceUserDao{/*** 保存的...原创 2021-02-18 21:06:15 · 474 阅读 · 0 评论 -
终于有人把Java异常处理方法给总结出来了,吃透这篇足够
推荐学习:这可能是全网Java学习路线最完整,最详细的版本了,没有之一文章目录一、前言 二、异常概述及异常体系结构 1.概述 2.异常体系结构 三、异常处理方式(两种) 1.方式一:try-catch-finally 2.方式二:throws 四、如何选择处理异常方式 五、手动抛出异常(throw) 六、自定义异常类 七、异常处理总结一、前言这篇文章是我之前学过的基础总结,希望对大家有所帮助!二、异常概述及异常体系结构1.概述我们在做程.原创 2021-02-07 16:12:42 · 179 阅读 · 0 评论 -
快手基于RocketMQ的在线消息系统建设实践
推荐学习:这可能是全网Java学习路线最完整,最详细的版本了,没有之一为什么建设在线消息系统在引入 RocketMQ 之前,快手已经在大量的使用 Kafka 了,但并非所有情况下 Kafka 都是最合适的,比如以下场景:业务希望个别消费失败以后可以重试,并且不堵塞后续其它消息的消费。 业务希望消息可以延迟一段时间再投递。 业务需要发送的时候保证数据库操作和消息发送是一致的(也就是事务发送)。 为了排查问题,有的时候业务需要一定的单个消息查询能力。为了应对以上这类场景,我们需要.原创 2021-02-06 21:52:38 · 136 阅读 · 0 评论 -
一个注解搞定 SpringBoot 接口防刷,还有谁不会?
说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考一,技术要点:springboot的基本知识,redis基本操作,首先是写一个注解类:importjava.lang.annotation.Retention;importjava.lang.annotation.Target;importstaticjava.lang.annotation.ElementType.METHOD;importstaticjava.lang.annotation.Re...原创 2021-01-31 14:57:50 · 139 阅读 · 0 评论 -
赞!SpringMVC中常用注解(案例讲解)
SpringMVC中常用注解RequestParam RequestBody PathVaribale 先了解下REST 风格 URL RequestHeader CookieValue ModelAttribute 修饰的方法有返回值 修饰的方法没有返回值 SessionAttributeRequestParam说明作用:把请求中指定名称的参数给控制器中的形参赋值。属性:value:请求参数中的名称。required:请求参数中是否必须提供此参...原创 2021-01-29 21:54:09 · 149 阅读 · 0 评论 -
面试题:JVM垃圾回收18问,知道这些的人月薪都25K了
GC 对于Java 来说重要性不言而喻,不论是平日里对 JVM 的调优还是面试中的无情轰炸。这篇文章会以一问一答的方式来展开有关 GC 的内容。本文章所说的 GC 实现没有特殊说明的话,默认指的是 HotSpot 的。我先将十八个问题都列出来,大家可以先思考下能答出几道。好了,开始表演。young gc、old gc、full gc、mixed gc 傻傻分不清?这个问题的前置条件是你得知道 GC 分代,为什么分代。这个在之前文章提了,不清楚的可以去看看。现在我们来回答.原创 2021-01-27 15:15:01 · 242 阅读 · 0 评论 -
肝了3个晚上,大佬把基于ssm框架实现的视频电影系统写出来了
项目介绍本系统使用Spring+SpringMVC+MyBatis架构,数据库使用MySQL,共分为以下四大模块:1、登录注册及用户管理提供登录注册以及个人基本资料的修改查询2、资源管理管理员从后端添加电影资源并赋予资源的信息如名称、图片、时长、电影上映时间、评分、导演、演员、类型、地区等信息,发布成功在后端以及用户页面军可查看播放。3、评论管理在增加互动性且维护良好环境的同时,对用户评论内置了敏感词汇过滤。4、收藏管理用户可以将喜欢的电影添加到收藏中心,便于随时观看影片原创 2021-01-26 15:36:51 · 1065 阅读 · 0 评论 -
操作系统并发三剑客:进程/线程/协程
进程线程协程进程和线程进程,平时我们打开一个播放器,开一个记事本,这些都是应用程序,一个软件的执行副本,这就是进程。从操作系统层面而言,进程是分配资源的基本单位,线程在很长时间被称为轻量级的进程,是程序执行的基本单位。这样看来一个分配资源的基本单位,一个是程序执行的基本单元。以前面试的时候,我经常也就这样背给面试官了,当自己成为了面试官才发现这些孩子答案为啥都是这个,原来网上大部分的资料也就说了这些呢,直接这样死记硬背当然不行,让我们回到最初的计算机时代。最初的计算机时代是什么样...原创 2021-01-25 14:19:46 · 252 阅读 · 0 评论