- 博客(286)
- 收藏
- 关注
原创 公司刚来的阿里p8,看完我构建的springboot框架,甩给我一份文档
在 Spring Boot 项目中,正常来说是不存在 XML 配置,这是因为 Spring Boot 不推荐使用 XML ,注意,并非不支持,Spring Boot 推荐开发者使用 Java 配置来搭建框架,Spring Boot 中,大量的自动化配置都是通过 Java 配置来实现的,这一套实现方案,我们也可以自己做,即自己也可以使用纯 Java 来搭建一个 SSM 环境,即在项目中,不存在任何 XML 配置,包括 web.xml。。
2023-01-09 15:53:28 597 1
原创 GitHub上标星65k+超火的《Java大厂面试》,分享整理的PDF版本
不论是校招还是社招都避免不了各种面试。笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:
2023-01-09 13:43:13 481
原创 Java技术分享:SpringBoot+mysql+...
Autowired// Mybatis plus 查询 student 表中的数据 返回List 类型// 相当于: SELECT stu_id,stu_name,stu_sex,date,room,acadimy FROM student// 通过id 查询 相当于:SELECT stu_id,stu_name,stu_sex,date,room,acadimy FROM student WHERE stu_id=1。
2023-01-09 11:49:17 584
原创 微服务网关鉴权:gateway使用、网关限流使用 用户密码加密 JWT鉴权
不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:客户端会多次请求不同的微服务,增加了客户端的复杂性存在跨域请求,在一定场景下处理相对复杂认证复杂,每个服务都需要独立认证难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。
2023-01-08 13:38:43 1106
原创 封神之作,超火Java面试突击手册,进大厂真的就这么简单?
大多程序员都在准备着金三银四,还没成功上岸的朋友不要灰心丧气。我在此为大家准备了一份Java面试突击手册和学习路线图谱,目的是为了大家方便整理学习思绪和面试题技巧,在面试中助大家一臂之力!下面就直接给大家展示这份封神之作的目录内容和知识点图谱了,可以让大家更好的去阅读和理解其中的干货内容。
2023-01-07 13:24:19 150
原创 翻车后,大家都建议我用CompletableFuture改造下,改造完真香啊
异步编程,利用多线程优化性能这个核心方案得以实施的基础他的目的也很简单,同一个CPU上执行几个松耦合的任务,充分利用CPU核数,实现最大化吞吐量,避免因为阻塞造成等待时间过长;这篇文章我主要是根据大家的建议,使用了Java8的CompletableFuture 来进行了原来的业务功能改造.在执行比较耗时的业务操作时候可以使用异步编程来提高性能,加快程序的处理速度。
2023-01-07 11:15:23 630
原创 什么? @ConditionalOnMissingBean 你没设置value?
上面2个 哪个更好,肯定是方法二方法一 对之后的扩展不友好,因为 可能之后有需求,根据type 或者 enable 来决定开启哪几个类,这个时候就会发现 结构不清晰,不好拆分方法二 可以 对config类 进行控制,结构上也更加清晰到这 你看看上面的写法还有问题么没错 就上面这短短几行代码还有问题。
2023-01-07 10:33:02 539
原创 图文结合带你搞懂MySQL日志之Slow Query Log(慢查询日志)
MySQL 的慢查询日志,用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 long_query_time 值的 SQL,则会被记录到慢查询日志中。long_query_time 的默认值为 10,意思是运行 10 秒以上 (不含 10 秒) 的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SQL 查询,并且有针对性地进行优化,从而提高系统的整体效率。
2023-01-07 10:15:51 5307
原创 2023年春招,Java后端最全面试攻略,吃透25个技术栈
小编分享的这份春招Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等25个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!
2023-01-06 14:38:07 1164
原创 解放双手,推荐一款阿里开源的低代码工具,YYDS
LowCodeEngine是阿里开源的一套面向扩展设计的企业级低代码技术体系,目前在在Github上已有4.7K+Star。这个项目大概是今年2月中旬开源的,两个月不到收获这么多Star,确实非常厉害!LowCodeEngine主要具有如下特性:提炼自企业级低代码平台的低代码引擎,奉行高度可扩展、最小内核、最强生态的设计理念;部署简单,基本上就是开箱即用,拥有完善的物料体系、功能强大的设置器、丰富的插件等;可视化编辑器具有完善的工具链,支持物料体系、设置器、插件等生态元素;
2023-01-06 13:07:21 354
原创 分布式事物如何保证接口请求顺序性?
先抛出一个问题大家思考一下:在分布式系统中,我们如何保证多个请求的顺序性问题,比如有A/B两个系统,系统A在一次订单业务处理中,向B系统发送三次请求,先进行插入订单操作,然后对订单状态进行修改,最后增加用户积分。但是这三次请求分别落在了不同的机器上,并且插入订单的操作由于一些意外导致延迟,修改订单操作先执行了,但是此时并没有订单信息,也就会出现我们期望之外的结果了。那面对这种情况我们应该如何避免呢,这就需要了解花哥今天说的:分布式服务中,如何保证请求的顺序性。
2023-01-06 11:33:13 253
原创 高并发系统简单玩,Alibaba全新出品亿级并发设计速成笔记真香
如何提升系统性能,设计出一个靠谱的系统是每一个架构师或者正在往架构师方向进阶的同僚们都需要考虑的问题。公司所处的行业,业务场景决定了你设计的系统演进过程,不过万变不离其宗,系统设计和优化的思想都是相通的(当然如果你刚入行没多久,目前肯定还不需要苦恼这种问题,但是工作用不到,不代表面试不问)。
2023-01-06 10:47:29 171
原创 全网显示 IP 归属地,用上这个开源库,实现也太简单了
细心的小伙伴可能会发现,最近蘑菇新上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的 IP 属地信息动态显示IP属地在蘑菇群聊中,也 可 以 展 示 IP 属 地,下面是小伙伴们在交流群中显示的下面,我就来讲讲,Java 中是如何获取 IP 属地的,主要分为以下几步通过 HttpServletRequest 对象,获 取 用户的 IP 地址通过 IP 地址,获取对应的省份、城市。
2023-01-06 09:59:13 478
原创 微服务架构下的认证鉴权解决方案
本文介绍了服务在从单体演进到微服务架构过程中,对于服务认证鉴权遇到的问题,并提供了开发人员可能会用到的解决方案。除方案1外(不大合理、属于野路子),其他方案在具体实践过程中都有较多的case。如今微服务架构已经成为事实上的标准,我们希望微服务一定是无状态的,专注于处理业务流程和规则,而鉴权认证的逻辑应交给专门的技术组件来负责,因此让网关来统一处理鉴权是一个更优雅的方案。
2023-01-05 14:37:19 693
原创 MySQL遵循最左前缀匹配原则?面试官:回去等通知吧
我们都知道,MySQL的Innodb引擎中,索引是通过B+树来实现的。不管是普通索引还是联合索引,都需要构造一个B+树的索引结构。那么,我们都知道普通索引的存储结构中在B+树的每个非节点上记录的索引的值,而这棵B+树的叶子节点上记录的是聚簇索引(主键索引)的值。如:那么,如果是联合索引的话,这棵B+树又是如何存储的呢?在联合索引中,联合索引(name,age)也是一个B+树,非叶子节点中记录的是name,age两个字段的值,叶子节点中记录的是name,age两个字段以及主键id的值。
2023-01-05 13:52:09 253
原创 再有人说不懂MySQL的MVCC机制,把这篇文章甩给他
MySQL中大名鼎鼎的MVCC机制想必大家都有所耳闻吧,虽然在平时MySQL使用过程中基本上用不到,但是面试中出场率十分高,而且作为架构师的你也是需要知道它的工作机制。那么你对MVCC机制了解多少呢?MVCC机制是用来干嘛的呢?底层的工作原理是怎么样的呢?本文就带你一探究竟。
2023-01-05 13:44:35 229
原创 【无标题】
见字如面,这里是佳佳~时光飞逝,转眼2022已经结束了,最近内卷严重,大环境并不是很好,相信很多小伙伴也在准备今年金三银四的面试计划。
2023-01-05 13:20:15 152
原创 细节决定成败:探究Mybatis中javaType和ofType的区别
今天给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一的查询。在练习的时候,小张同学突然举手求助,说在做预习作业使用一对多查询时,遇到了。
2023-01-05 11:35:24 425
原创 差点自闭,京东面试官夺命连环问操作系统,幸好最后拿到了offer
为什么一定要学计算机操作系统啊?因为不打好计算机基础功底,上来就直接学java、Android等应用课程的话,你就相当于到一个陌生城市旅游的观光者,只能看到各种高楼大厦的外表。如果你深入地学好这些计算机基础知识,那你就是一个真正的建筑设计师,通过各种高楼大厦的外表就直接能够看透其设计结构和架构本质。并且现在各大厂面试的时候都会问很多关于操作系统的面试题,记得我当时面试京东的时候就差点自闭,面试官夺命连环问我操作系统,回答完这一题还有下一题。本以为问几句就过去了,后面一连问了我一二十道操作系统的题目,
2023-01-04 13:17:53 218
原创 Github火到CSDN, 字节高级架构师亲码出 elasticsearch 实战手册
简单说,Elasticsearch 就是一个分布式的搜索与分析引擎。
2023-01-04 11:14:04 176
原创 Docker 与 K8S学习笔记之Kubernetes集群搭建
我们这一节将使用kubeadm搭建Kubernets集群。我们首先需要使用Virtualbox创建一个虚拟机,步骤如下:1、新建虚拟机我们设置内存2G,硬盘20G,CPU 2核,在光驱设置中选择已经下好的Centos镜像。设置网络为【桥接网卡】
2023-01-04 10:47:32 197
原创 阿里出品,SpringBoot应用自动化部署神器,IDEA版Jenkins?
CloudToolkit是阿里出品的一款IDEA插件,通过它我们可以更方便地实现自动化部署,其内置的终端工具和文件上传功能,即使用来管理服务器也非常方便!这款IDEA插件不仅功能强大,而且完全免费!体验了一把阿里出品的CloudToolkit,做好配置以后,基本可以实现一键部署应用到远程服务器,说它是IDEA版的Jenkins也不为过!其内置的终端工具也是非常好用的,强烈推荐大家尝试一波!
2023-01-03 16:20:00 318
原创 面试官:MySQL 啥时候用记录锁,啥时候用间隙锁?
我们做了这么多个测试,虽然有 3 种索引类型(聚簇索引、唯一二级索引、普通二级索引)和 2 种匹配类型(精确匹配、范围匹配),它们两两组合可以得出 6 种情况,再加上查询的值是否存在,可能有更多的可能性。但是我们发现它们的结构都非常类似,基本上都跟查找的记录是否存在,以及查找的记录是否是唯一的相关。由此,我们大致可以得出结论:如果查找的记录是唯一且存在的,那么只会使用记录锁,而不会使用间隙锁或 Next-Key 锁。如果查找的记录不唯一或者不存在,那么就会使用 Next-Key 锁和间隙锁。
2023-01-03 13:25:36 193
原创 大型分布式系统下缓存应该怎么玩,才能用得高效
在项目中可能多种缓存并行使用,使用不同的缓存都要基于业务进行考量,包括成本,数据一致性,性能问题等,不同的缓存方式有不同的特点。redis缓存分布式系统中共享数据,性能高效,扩展性强,redis可以基于数据分片、哨兵模式进行扩展,但是要额外的费用进行运维,并且引入第三方中间件,系统的复杂度也高,排查困难,而且每次都要经过网络调用,有可能存在网络超时的现象,数据丢失,所以要做好数据兼容,兜底方案。
2023-01-03 11:58:15 236
原创 面试官:说说电商系统订单超时自动取消怎么实现?你有几种方案?
大家对电商购物应该都比较熟悉了,我们应该注意到,在下单之后,通常会有一个倒计时,如果超过支付时间,订单就会被自动取消。下单今天,我们来聊聊订单超时未支付自动取消的几种方案。
2023-01-03 11:13:21 939
原创 面试官:使用 RocketMQ 怎么进行灰度发布?
本文介绍了 RocketMQ 灰度消息的使用方法,场景比较简单。对于全链路的复杂灰度场景,可以参考使用阿里的微服引擎 MSE。
2023-01-03 10:37:21 177
原创 字节跳动这份面试题,你能打几分
最近这段时间,身边的一个朋友刚刚拿到字节跳动的offer,一起来复盘一下他的offer之路,希望能给正在看机会的你有所帮助。这次面试总共经历了四轮,这四轮面试都是视频面试,其中前三轮是技术面试,最后一轮是hr面试。前三轮技术面试都有一个手动写代码的环节,在牛客网上写。情况也不完全一样,有的是先写代码后面试,有的是先聊一会儿再写代码。
2022-12-31 13:49:52 165
原创 一次简单的Java服务性能优化,实现压测 QPS 翻倍
前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了。在很低的 QPS 压力下服务器 load 就能达到 10-20,CPU 使用率 60% 以上,而且在每次流量峰值时接口都会大量报错,虽然使用了服务熔断框架 Hystrix,但熔断后服务却迟迟不能恢复。每次变更上线更是提心吊胆,担心会成为压死骆驼的最后一根稻草,导致服务雪崩。在需求终于缓下来后,leader 给我们定下目标,让我们在两周内把服务性能问题彻底解决。
2022-12-31 13:36:38 404
原创 Spring中的Controller和Service是线程安全的吗?我有点懵
1、在@Controller/@Service等容器中,默认情况下,scope值是单例-singleton的,也是线程不安全的。2、尽量不要在@Controller/@Service等容器中定义静态变量,不论是单例(singleton)还是多实例(prototype)他都是线程不安全的。3、默认注入的Bean对象,在不设置scope的时候他也是线程不安全的。4、一定要定义变量的话,用ThreadLocal来封装,这个是线程安全的。
2022-12-31 13:27:11 500 2
原创 终于搞懂如何用Java去除HTML标签了
在我平时的工作中,偶尔会用 Java 做一些解析HTML的工作。有的时候我需要删除所有的HTML标签,只保留纯文字内容。这个问题在做过一些爬虫工作的朋友来说很简单。下面来说说,我们平时使用到的集中解析的方法。
2022-12-30 14:06:16 6628
原创 一文看懂Java锁机制
CPU的基本工作是执行存储的指令序列,即程序。程序的执行过程实际上是不断地取出指令、分析指令、执行指令的过程。几乎所有的冯•诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数和结果写回。现代处理器的体系结构中,采用了流水线的处理方式对指令进行处理。指令包含了很多阶段,对其进行拆解,每个阶段由专门的硬件电路、寄存器来处 理,就可以实现流水线处理。实现更高的CPU吞吐量,但是由于流水线处理本身的额外开销,可能会增加延迟。
2022-12-30 11:56:43 169
原创 异常处理实践 - 抛异常+错误码
在业务逻辑中,通常使用两种方式处理异常:返回错误码:优点是性能更好,但是不宜维护。抛出异常:可以使得代码更清晰,可读性更好,更符合面向对象。选择哪种需要根据场景而定,不管如何选择,只要团队达成共识,统一规范就可以。下面介绍一下我使用的处理异常的方式。创建一个业务异常基类 BaseException extends RuntimeException ,为其添加两个属性:code 和 message ,并添加一些常用的构造方法。其中, code 的作用是储存错误码,在返回前台时将错误码返回给用户。
2022-12-30 11:44:33 686
原创 springboot基于微信小程序的在线办公系统+java+uinapp+Mysql
基于springboot的在线办公小程序。它是在Windows下,以MYSQL为数据库开发平台,java技术和Tomcat网络信息服务作为应用服务器。在线办公小程序的功能已基本实现,主要包括首页、个人中心、通知公告管理、员工管理、部门信息管理、职位信息管理、会议记录管理、待办事项管理、工资信息管理、留言板管理、系统管理等。
2022-12-28 11:24:09 447
原创 【JVM深层系列】JVM调优的“标准参数“的各种陷阱和坑点分析
搞清楚了上面这些组合,我们再来看看各类GC算法的触发条件。简单说,触发条件就是某GC算法对应区域满了,或是预测快满了。比如,各种Young GC的触发原因都是eden区满了;Serial Old GC/PS MarkSweep GC/Parallel Old GC的触发则是在要执行Young GC时候预测其promote的object的总size超过老生代剩余size;CMS GC的initial marking的触发条件是老生代使用比率超过某值;
2022-12-28 11:11:55 225
原创 Synchronized轻量级锁原理
1.在线程栈中创建一个Lock Record,将其obj(即Object reference)字段指向锁对象。2.会把锁的Mark Word复制到自己的Lock Record的Displaced Mark Word里面。然后线程尝试直接通过CAS指令将Lock Record的地址存储在对象头的mark word中,如果对象处于无锁状态则修改成功,代表该线程获得了轻量级锁。如果失败,进入到步骤3。3.如果是当前线程已经持有该锁了,代表这是一次锁重入。
2022-12-27 14:52:01 261
原创 手画图解,关于死锁,面试的一切都在这里了
死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力作用,它们都将无法推进下去。产生死锁的四个必要条件得烂熟于心:互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所占用。此时若有其他进程请求该资源,则请求进程只能等待。不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放。
2022-12-25 16:21:55 126
原创 SQL优化篇:如何成为一位写优质SQL语句的绝顶高手
(Structured Query Language)标准结构化查询语言简称SQL,编写SQL语句是每位后端开发日常职责中,接触最多的一项工作,SQL是关系型数据库诞生的产物,无论是什么数据库,MySQL、Oracle、SQL Server、DB2、PgSQL....,只要还处于关系型数据库这个范畴,都会遵循统一的SQL标准,这句话简单来说也就是:无论什么关系型数据库,本质上SQL的语法都是相同的,因为它们都实现了相同的SQL标准,不同数据库之间仅支持的特性不同而已。
2022-12-25 13:20:56 1204
原创 Redis系列:深刻理解高性能Redis的本质
分布式系统绕不开的核心之一就是数据缓存,有了缓存的支撑,系统的整体吞吐量会有很大的提升。通过使用缓存,我们把频繁查询的数据由磁盘调度到缓存中,保证数据的高效率读写。 当然,除了在内存内运行还远远不够,我们今天就以具有代表性的缓存中间件Redis为例子,分析下,它是如何达到飞起的效率。
2022-12-24 11:52:29 513
原创 优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
以上这几种方法实现的话比较简单,但是真实工作中还需要考虑的点还很多,比如需要保护暴露的点不被别人利用,一般要加一些防火墙,或者只在内网使用,保证程序安全。在真实的工作中的时候第三种比较常用,程序中一般使用内存队列或线程池的时候最好要优雅的关机,将内存队列没有处理的保存起来或线程池中没处理完的程序处理完。但是因为停机的时候比较快,所以停服务的时候最好不要处理大量的数据操作,这样会影响程序停止。
2022-12-24 11:22:27 249
原创 这款基于Spring Boot+Spring Security的后台管理系统,非常好用
Base Admin一套简单通用的后台管理系统,主要功能有:权限管理、菜单管理、用户管理,系统设置、实时日志,API加密,以及登录用户修改密码、配置个性菜单等。
2022-12-24 11:02:12 233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人