fighting
文章平均质量分 80
菜鸟是大神
人有两次生命,一次是出生,一次是觉醒,希望我们可以在风华正茂时重获新生,而不是在垂暮之年幡然醒悟。
展开
-
【超详细demo】Spring Boot 多数据源配置
这样写看起来确实有些麻烦,通常可能不会像这样在一个方法里操作多个数据库,就比如说假设这是一个管理后台,为了图省事把所有业务都写在这一个项目里,这个时候就需要配置多个数据源,各个数据库的业务互相没有关联,只是写在同一个项目中而已,这样的话如果每次都手动设置数据源太麻烦,可以定义一个AOP切面来自动切换数据源。由于是MyBatsi-Plus,所以配的是MybatisSqlSessionFactoryBean,如果是MyBatis,则应该是SqlSessionFactoryBean。2、定义切面、切点、通知。原创 2022-11-28 21:31:05 · 1520 阅读 · 0 评论 -
【最详细】注解@controller@service@component@repository区别
component即组件,相当于xml配置文件中的bean申明,通过spring的自动扫描机制,在规定的类路径中寻找标注了@Component,@Service,@Repository,@Controller注解的类,并把这些类纳入进容器中进行管理。从@service的源码看,service仍然是使用了@Component注解(@Controller与@Repository与service一样,这里就不贴源码了)。@Repository:持久层,用于标注数据访问组件,即DAO组件。原创 2022-11-26 20:26:42 · 1082 阅读 · 0 评论 -
【最详细】@Autowired 和 @Resource 的区别
区别2:@Autowired 默认的注入方式是ByType(根据类型进行匹配),@Resource 默认的注入方式是 ByName (根据名称进行匹配)4、@Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。5、@Autowired是Spring定义的注解,而@Resource是JSR-250定义的注解。区别1:@Autowired 是spring提供的注解,@Resource 是JDK提供的注解。6、二者装配顺序不同。原创 2022-11-26 20:11:16 · 3191 阅读 · 0 评论 -
【算法详解】数据结构:7种哈希散列算法,你知道几个?
哈希表的历史哈希散列的想法在不同的地方独立出现。1953 年 1 月,汉斯·彼得·卢恩 ( Hans Peter Luhn ) 编写了一份IBM内部备忘录,其中使用了散列和链接。开放寻址后来由 AD Linh 在 Luhn 的论文上提出。大约在同一时间,IBM Research的Gene Amdahl、Elaine M. McGraw、Nathaniel Rochester和Arthur Samuel为IBM 701汇编器实现了散列。原创 2022-10-27 21:15:47 · 2035 阅读 · 0 评论 -
【算法详解】如何使用递归,递归使用的技巧详解
先来看下百度百科的定义:程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。原创 2022-10-27 21:08:05 · 2274 阅读 · 0 评论 -
【超详细】7000字+24张图带你彻底弄懂线程池
线程池其实是一种池化的技术的实现,池化技术的核心思想其实就是实现资源的一个复用,避免资源的重复创建和销毁带来的性能开销。在线程池中,线程池可以管理一堆线程,让线程执行完任务之后不会进行销毁,而是继续去处理其它线程已经提交的任务。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统 的稳定性,使用线程池可以进行统一的分配,调优和监控。原创 2022-10-25 06:19:51 · 1104 阅读 · 0 评论 -
【代码优化】有了这45个小技巧,再也不怕代码写得烂了!!
比如在项目中不同的类型的业务可能需要上传各种各样的附件,此时就可以定义好不同的一个附件的枚举,来区分不同业务的附件。不要在代码中直接写死,不定义枚举,代码阅读起来非常困难,直接看到数字都是懵逼的。。原创 2022-10-24 20:49:47 · 4675 阅读 · 0 评论 -
【数据库优化】记一次引入Elasticsearch的系统架构实战
我曾经面试,当时面试官问了我一个问题:如果你想使用某个新技术但是领导不愿意,你怎么办?对于该问题我相信大家就算没有面试被问到过,现实工作中同事之间的合作也会遇到。因此从我的角度重新去回答这个问题,有以下几点:1.师出有名,在软件工程里是针对问题场景提供解决方案的,如果脱离的实际问题(需求)去做技术选型,无疑是耍流氓。大家可以回顾身边的“架构师”、“技术Leader”是不是拍拍脑袋做决定,问他们为什么这么做,可能连个冠冕堂皇的理由都给不出。2.信任度,只有基于上面的条件,你才有理由建议引入新技术。原创 2022-10-22 20:42:27 · 306 阅读 · 0 评论 -
【数据库优化】后端思维之数据库性能优化方案
毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱么日常遇到的80%甚至90%的性能问题。 从解决问题的角度出发,我们得先了解到问题的原因;其次我们得有一套思考、判断问题的流程方式,让我们合理的站在哪个层面选择方案;最后从众多的方案里面选择一个适合的方案进行解决问题,找到一个合适的方案的前提是我们自己对各种方案之间的优缺点、场景有足够的了解原创 2022-10-22 20:35:30 · 210 阅读 · 0 评论 -
【最实用实战】如何排查CPU占用100%
top找到进程号top -Hp进程号,找到线程号,线程转成十六进制。jstack pid分析。根据十六进制查询,找到问题代码位置。原创 2022-09-24 20:20:14 · 1687 阅读 · 0 评论 -
【最全最详细】Nginx 最新面试题汇总(共 40 道,全网最全)
Nginx 是一个 轻量级 / 高性能的反向代理 Web 服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理 2-3 万并发连接数,官方监测能支持 5 万并发,现在中国使用 nginx 网站用户有很多,例如:新浪、网易、 腾讯等。一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。原创 2022-09-24 19:03:37 · 949 阅读 · 0 评论 -
【最全最详细】图解 SQL 的执行顺序
分组结束之后,我们再执行select语句,因为聚合函数是依赖于分组的,聚合函数会单独新增一个查询出来的字段,这里用紫色表示,这里我们两个id重复了,我们就保留一个id,重复字段名需要指向来自哪张表,否则会出现唯一性问题。我们之前看到了普通的筛选条件是不影响的,但是having还支持聚合函数,这是where无法实现的。然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段。用于确定我们要查询的表的范围,涉及哪些表。原创 2022-09-23 14:13:44 · 1108 阅读 · 0 评论 -
【分布式幂等性】高并发下如何保证接口的幂等性?
接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景:有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。我们在项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果(此时有可能已经成功了),为了避免返回错误的结果(这种情况不可能直接返回失败吧?原创 2022-09-15 06:18:15 · 181 阅读 · 0 评论 -
【分布式】高并发下如何防重?
最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。追查原因之后发现,这个事情没想象中简单,可以说一波多折。原创 2022-09-15 06:06:01 · 486 阅读 · 0 评论 -
【最详细demo】雪花算法详细解释
例如你的业务可能达不到 69 年之久,那么可用减少时间戳占用的位数,雪花算法服务需要部署的节点超过1024 台,那么可将减少的位数补充给机器码用。对于 MySQL 而言,一个表中的主键 id 一般使用自增的方式,但是如果进行水平分表之后,多个表中会生成重复的 id 值。注意,雪花算法中 41 位比特位不是直接用来存储当前服务器毫秒时间戳的,而是需要当前服务器时间戳减去某一个初始时间戳值,一般可以使用服务上线时间作为初始时间戳值。雪花算法的原理就是生成一个的 64 位比特位的 long 类型的唯一 id。原创 2022-09-15 06:02:18 · 714 阅读 · 0 评论 -
【最全最详细explain讲解】explain | 索引优化的这把绝世好剑,你真的会用吗?
对于互联网公司来说,随着用户量和数据量的不断增加,慢查询是无法避免的问题。一般情况下如果出现慢查询,意味着接口响应慢、接口超时等问题。如果是高并发的场景,可能会出现数据库连接被占满的情况,直接导致服务不可用。慢查询的确会导致很多问题,我们要如何优化慢查询呢?主要解决办法有:监控sql执行情况,发邮件、短信报警,便于快速识别慢查询sql打开数据库慢查询日志功能简化业务逻辑代码重构、优化异步处理sql优化索引优化其他的办法先不说,后面有机会再单独介绍。原创 2022-09-15 05:51:15 · 3791 阅读 · 2 评论 -
【最全最详细数据库优化】sql优化的15个小技巧
这篇文章从15个方面,分享了sql优化的一些小技巧,希望对你有所帮助。原创 2022-09-15 05:43:11 · 1009 阅读 · 0 评论 -
【最全最详细索引失效】索引失效的10种场景,数据库优化
不知道你在实际工作中,有没有遇到过下面的这两种情况:明明在某个字段上加了索引,但实际上并没有生效。索引有时候生效了,有时候没有生效。今天就跟大家一起聊聊,mysql数据库索引失效的10种场景,给曾经踩过坑,或者即将要踩坑的朋友们一个参考。原创 2022-09-15 05:31:47 · 326 阅读 · 1 评论 -
【最全最详细数据库设计技巧】数据库设计技巧,同事也开始悄悄模仿了...
对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。后端开发的日常工作,需要不断的建库和建表,来满足业务需求。通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。今天就跟大家一起聊聊,数据库建表的15个小技巧,希望对你会有所帮助。原创 2022-09-14 22:20:41 · 623 阅读 · 0 评论 -
【数据库优化方案】后端思维--数据库性能优化方案
慢的本质查找的时间复杂度查找算法存储数据结构数据总量数据拆分高负载CPU、磁盘繁忙无论是关系型数据库还是NoSQL,任何存储系统决定于其查询性能的主要有三种:而决定于查找时间复杂度主要有两个因素:无论是哪种存储,数据量越少,自然查询性能就越高,随着数据量增多,资源的消耗(CPU、磁盘读写繁忙)、耗时也会越来越高。从关系型数据库角度出发,索引结构基本固定是B+Tree,时间复杂度是O(log n),存储结构是行式存储。因此咱们对于关系数据库能优化的一般只有数据量。而高负载造成原因有高并发请求、复杂查询等,导致原创 2022-08-11 15:00:51 · 338 阅读 · 0 评论 -
【springboot系列】springboot启动过程源码分析,【最全源码源码,手把手教】
SpringApplication 的构建都是为了 run() 方法启动做铺垫,构造方法中总共就有几行代码,最重要的部分就是设置应用类型、设置初始化器、设置监听器。初始化器和这里的监听器都要放置在 spring.factories 文件中才能在这一步骤加载,否则不会生效,因此此时 IOC容器 还未创建,即使将其注入到 IOC容器 中也是不会生效的。...原创 2022-08-09 13:15:26 · 803 阅读 · 0 评论 -
【面试2】Springboot启动流程分析原理(二)
springboot启动流程分析原理(二)原创 2022-06-27 23:05:52 · 127 阅读 · 0 评论 -
【【SpringBoot系列】最详细demo--自定义日志脱敏组件,简单3 步完成 Spring Boot 的日志脱敏
最详细demo--自定义日志脱敏组件,简单3 步完成 Spring Boot 的日志脱敏原创 2022-07-19 09:46:25 · 540 阅读 · 0 评论 -
【面试1】Springboot启动流程分析原理(一)
springboot启动流程分析原理原创 2022-06-27 22:05:08 · 244 阅读 · 0 评论 -
【面试3】Springboot自动装配原理解析
Springboot自动装配原理解析原创 2022-06-27 23:19:14 · 371 阅读 · 0 评论 -
阿里面试:阿里二面:main 方法可以继承吗?
转公众号:我是程序汪阿里二面:main 方法可以继承吗?昨天,微信群里一位网友,在群里发了自己面试阿里的过程。其中一个面试,他在群里 PUA 其他网友。这道面试题就是:Java 中的 main 方法可以继承吗?我们一开始学习 Java 程序的时候,最先跑的一段代码肯定是 main 方法,main 方法的格式如下:publicstaticvoidmain(String[]args){}那么 main 方法有什么特殊的地方呢?今天我们来简单看一下。首先针对 main 方...原创 2021-12-26 22:47:34 · 125 阅读 · 0 评论 -
已解决:缓存穿透、缓存击穿和缓存雪崩,你都懂了吗?
转自公众号:苏三说技术对于从事后端开发的同学来说,缓存已经变成的项目中必不可少的技术之一。没错,缓存能给我们系统显著的提升性能。但如果你使用不好,或者缺乏相关经验,它也会带来很多意想不到的问题。今天我们一起聊聊如果在项目中引入了缓存,可能会给我们带来的下面这三大问题。看看你中招了没?1. 缓存穿透问题大部分情况下,加缓存的目的是:为了减轻数据库的压力,提升系统的性能。1.1 我们是如何用缓存的?一般情况下,如果有用户请求过来,先查缓存,如果缓存中存在数据,则直接返回。如果缓存中不原创 2021-12-25 22:09:03 · 2836 阅读 · 0 评论 -
【解决方案】可视化全链路日志追踪-日志追踪系统
分布式会话跟踪,是一种。点评内容平台日均处理百万条内容,涉及百万次业务场景的执行、高达亿级的逻辑节点的执行,而业务日志分散在不同的应用中,并且不同内容,不同场景,不同节点以及多次执行的日志混杂在一起,无论是日志的搜集还是现场的还原都相当繁琐耗时,传统的业务追踪方案越来越不适用于内容平台。(Tracing),我们提出了一套新的业务追踪通用方案,通过在业务执行阶段,结合完整的业务逻辑动态完成日志的组织串联,替代了传统方案低效且滞后的人工日志串联,最终可以实现业务全流程的高效追踪以及业务问题的高效定位。...原创 2022-07-27 11:02:03 · 1066 阅读 · 0 评论 -
MySQL优化:Group By 深度优化,已解决,索引
转公众号:java大后端导读当我们交友平台在线上运行一段时间后,为了给平台用户在搜索好友时,在搜索结果中推荐并置顶他感兴趣的好友,这时候,我们会对用户的行为做数据分析,根据分析结果给他推荐其感兴趣的好友。这里,我采用最简单的SQL分析法:对用户过去查看好友的性别和年龄进行统计,按照年龄进行分组得到统计结果。依据该结果,给用户推荐计数最高的某个性别及年龄的好友。那么,假设我们现在有一张用户浏览好友记录的明细表t_user_view,该表的表结构如下:CREATETABLE`t_u..原创 2022-01-08 22:39:00 · 2739 阅读 · 0 评论 -
面试官:SpringBoot 中怎么样实现分布式锁
转公众号:JAVA日知录概述提到分布式锁大家都会想到如下两种: 基于Redisson组件,使用redlock算法实现 基于Apache Curator,利用Zookeeper的临时顺序节点模型实现 今天我们来说说第三种,使用Spring Integration实现,也是我个人比较推荐的一种。Spring Integration在基于Spring的应用程序中实现轻量级消息传递,并支持通过声明适配器与外部系统集成。Spring Integration的主要目标是提供一个简单的..原创 2022-01-06 16:08:20 · 352 阅读 · 0 评论 -
【超全详细】SQL 优化方法
然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。...原创 2022-07-18 19:51:42 · 399 阅读 · 0 评论 -
面试:GET 请求能上传图片吗,已解决
转公众号: java大后端前言曾经遇到的面试题,觉得挺有意思,来说下我的答案及思考过程。首先,我们要知道的是,图片一般有两种传输方式:base64和file对象。base64 图片图片的base64编码想必大家都见过:base64的本质是字符串,而GET请求的参数在url里面,所以直接把图的base64数据放到url里面,就可以实现GET请求传图片。input输入框拿到的图是file对象,图片file对象转base64:// im...原创 2022-01-08 21:32:41 · 845 阅读 · 0 评论 -
【面试1】Java序列化和反序列化为什么要实现Serializable接口
最近公司的在做服务化, 需要把所有model包里的类都实现Serializable接口, 同时还要显示指定serialVersionUID的值. 听到这个需求, 我脑海里就突然出现了好几个问题, 比如说: 序列化和反序列化是什么? 实现序列化和反序列化为什么要实现Serializable接口? 实现Serializable接口就算了, 为什么还要显示指定serialVersionUID的值? 我要为serialVersionUID指定个什么值? 下面我们来一一解答原创 2022-05-19 13:39:30 · 134 阅读 · 0 评论 -
【最全最详细Docker】用docker部署mysql、tomcat、nginx、redis 环境部署
这是因为我们使用到了目录挂载,本地的目录/usr/local/webapps是新创建的,没有任何应用,所以访问时无显示。需要注意在tomcat部署过程当中,如部署后无法正常访问,报错404,这说明tomcat服务是没问题的。找到配置文件default.conf,可以看到nginx的页面文件是保存于/usr/share/nginx/html/中的;-v目录映射关系,前者为宿主机目录,后者是映射到宿主机上的目录,如果没有该目录会自动创建。所以我们将需要部署的页面文件移动到此目录;...原创 2022-07-27 13:42:05 · 1368 阅读 · 0 评论 -
【jvm优化】线上JVM调优实践
就在我还在调查入口流量的问题时,另外一个同事找到了根本的原因,原来是在某个条件下,会查询表中所有未处理的指定数据,但是由于查询的时候where条件中少加了模块这个条件,导致查询出的数量达40多万条,而且通过log查看当时的请求和数据,可以判断这个逻辑确实是已经执行了的,dump出的内存中只有4W多个对象,这个是因为dump时候刚好查询出了这么多个,剩下的还在传输中导致的。通过GC的次数和GC的时间,本次优化宣告成功,且prod1的配置更优,极大提升了服务器的吞吐量和降低了GC一半以上的时间。...原创 2022-07-27 11:57:33 · 635 阅读 · 2 评论 -
【jvm优化超详细】常见的JVM调优场景
输出信息是Timestamp是距离jvm启动的时间,S0、S1、E是新生代的两个Survivor和Eden,O是老年代区,M是Metaspace,CCS使用压缩比例,YGC和YGCT分别是新生代gc的次数和时间,FGC和FGCT分别是老年代gc的次数和时间,GCT是gc的总时间。通过jstack工具输出现在的线程栈,再通过grep命令结合上一步拿到的线程16进制的id定位到这个线程的运行情况,其中jstack后面的7268是第(1)步定位到的进程号,grep后面的是(2)、(3)步定位到的线程号。...原创 2022-07-27 11:50:20 · 446 阅读 · 0 评论 -
【Spring源码学习】spring IOC容器管理
具体源码下载参考我的资源B站【尚硅谷】Spring框架视频教程_spring5源码资料下载。2、idea新建项目先实现一个IOC例子。原创 2022-07-22 15:34:42 · 238 阅读 · 0 评论