- 博客(67)
- 收藏
- 关注
原创 Java大厂面试实录:从Spring MVC到微服务的技术深度探讨
假设我们有一个用户管理系统,使用Spring MVC开发,用户数据存储在MySQL中。:呃,那就用Spring Cloud的Eureka做服务发现,Spring Cloud Gateway做网关,再用Kafka做消息队列,用户动态一有更新就发到Kafka里……在互联网大厂的技术面试中,面试官不仅会考察求职者的技术深度,还会结合具体业务场景进行提问。:呃,用Spring Security集成OAuth2,用户登录的时候,返回一个JWT Token,后续的请求都带着这个Token。:(点头)嗯,是有的。
2026-01-19 10:00:18
734
原创 互联网大厂Java面试场景:技术栈与业务场景的面试技巧
谢先生,今天的面试就到这里了。回去之后可以多看看关于微服务和分布式的设计资料。我们会在一周内通知你结果。我一定会努力学习!
2026-01-19 08:00:25
424
原创 互联网大厂Java面试场景:从缓存到微服务的技术探索
谢飞机,一个搞笑但略懂技术的程序员,正在应聘一家互联网大厂的Java开发岗位。面试官是一位严肃且专业的技术专家。本文通过三轮面试,结合场景化问题,从缓存技术到微服务架构,循序渐进地探讨技术细节,帮助小白了解技术核心与业务应用。基本原理:Redis通过内存存储数据,支持多种数据结构,适合高性能场景。设计高可用性:主从复制和哨兵模式可以提升系统的容灾能力;Redis Cluster支持分布式架构。缓存问题应对缓存穿透:使用布隆过滤器拦截非法请求。缓存击穿:设置热点数据不过期或者使用锁机制。
2026-01-18 11:00:21
445
原创 互联网大厂Java面试场景:从Spring MVC到分布式消息队列
某互联网大厂正在招聘Java开发工程师,谢飞机作为应聘者参与面试。面试官表情严肃,语气专业,提出了3轮技术问题,而谢飞机则以搞笑的风格应对。有些问题他的回答成功获得了面试官的认可,但面对复杂问题时,他的表现却略显尴尬。
2026-01-18 09:00:16
336
原创 互联网大厂Java面试:从Spring框架到微服务架构的技术问答
呃,Spring Boot是一个简化Spring应用开发的框架,提供了自动配置和嵌入式服务器。Spring MVC呢,是Spring框架中的模块,用于开发Web应用,支持请求-响应模型。我会用Spring Boot,数据库用MySQL,然后……:呃,用Spring Cloud吧,可以用Eureka做服务注册,用Zuul做网关,用OpenFeign实现服务间调用。:呃,Kafka吧,性能高,消息持久化……:呃,Spring Security可以吧,用JWT做认证,配合OAuth2。谢飞机彻底慌了:呃,嗯。
2026-01-18 08:00:17
427
原创 互联网大厂Java面试:微服务架构与数据库优化实战
Eureka确实是常见的服务注册中心,除此之外,像Consul和Spring Cloud也可以实现类似功能。: 服务通信一般用HTTP或者消息队列,gRPC听过,好像还能用Protobuf,具体没研究。谢飞机在一间互联网大厂的会议室接受面试,面试官面色严肃,手握简历,准备对谢飞机进行技术深挖。: 谢飞机,今天的面试就到这里了,虽然还有一些不足,但整体表现尚可。: 高可用性就是多部署几个服务,容错的话,用点熔断器什么的,比如Hystrix。: 在电商场景下,商品库存查询是高频操作,你会如何优化数据库?
2026-01-17 20:00:19
450
原创 历飞雨的互联网大厂面试实录:如何用生活实例回答技术问题
HashMap通过数组和链表(或红黑树)实现key-value存储。核心方法包括put、get操作,以及resize扩容机制。扩容时会重新计算hash值分配位置。
2026-01-16 17:06:29
315
原创 谈二级索引
唯一索引(Unique Index):与普通索引类似,但在索引列上要求唯一性,与主键索引不一样的是,主键索引的唯一性是针对主键列的,而唯一索引是针对普通索引。唯一索引可以确保索引列的值是唯一的,可以用于查找特定的匹配行,也用于加速对非聚簇索引列的查询。哈希索引(Hash Index):哈希索引将索引列的值通过哈希函数映射为哈希码,然后使用哈希码进行索引。非聚簇索引的就是二级索引,当我们在数据库中频繁使用某一个列作为查询条件的时候,数据库会自动帮我们创建该列作为二级索引,一定要是非常频繁才行哦。
2023-07-16 11:45:46
634
原创 mysql 是怎样运行的笔记
要注意的是,查询到一条符合条件的数据后,就立马去回表操作,然后在回来接着查询符合条件的列。所以在查询叶子节点的时候,会从第一条符合条件的数据不断的往后面页查找,直到找不到为止。innodb的做法是延用了页的结构,将每个用户页中取最小的主键值作为新的一页的标识,这个页的关系可以看成是一颗树也就是我们说的B+树,每个非叶子节点就是我们的目录项页,在讲到用户数据存取到的是在页中的时候,讲述到这些数据的存放规律,以及其他的存取内容。第二点,每页之间的页码不是按照顺序来的,当数据达到页最大的存储时就会分页。
2023-06-17 10:21:23
513
原创 spring.factories 的作用是什么
spring.factories 文件用于在 Spring Boot 项目中配置自动配置项。它包含了一系列 key-value 对,key 是自动配置类的全限定名,value 是这些配置类对应的条件类。Spring Boot 会在启动时扫描 classpath 下的 META-INF/spring.factories 文件,并加载其中定义的自动配置类。这些自动配置类会在满足条件时自动生效,配置对应的 bean。
2023-05-08 16:13:37
3557
原创 代码评审都评审些什么呢?
2.2、新的技术使用,自己是要讲解一下这个技术用来干什么的,是在这个业务的初衷是怎样,是否符合。2.3、风险问题也是要讲解一下,看看新增的代码是否有风险。2.1、可能影响到其他人的代码,确认代码的修改范围。1、 方法参数过多(最好是3个,一般是3-5个吧)2.4、自我讲解代码的亮点。6、 一个方法调用大量查询。2、方法太长,未进行拆分。5、方法命名及其不合理。可以分为以下几点进行描述。
2023-05-07 10:04:05
1012
原创 idea 启动 rocketmq源码
在idea的配置应用程序中指定启动要读取的环境路径key值在org.apache.rocketmq.common.MixAll文件中。在mq的运行主目录中创建conf、logs文件夹,conf存放的文件去rocketmq-distribution模块下复制3个文件。去org.apache.rocketmq.example.quickstart文件下分别启动生产者和消费者。${user.home}替换成项目的路径,这样模块启动的日志才会到logs文件夹下。broker启动成功的页面。说明生产和消费都成功了。
2023-03-12 16:54:27
499
原创 避坑创建空list集合
如果需要创建支持常规list操作的空list,可以使用CollUtil.newArrayList。以上2个类内部都没有实现add方法,且都是继承AbstractList类,第一个 生成的是Collections内部的EmptyList对象,所以最终调用的add方法只能是AbstractList类中的,第二个 生成的是Arrays内部的ArrayList对象,而AbstractList类中的add方法是直接报错。生成的list都是不能直接添加数据的。
2023-03-09 17:47:52
507
原创 mybatis-plus lambda自动填充更新生效
非XML的更新或新增的操作,要想自动填充功能生效需要添加对应的实体类,才能走到自定义更新策略中、
2023-03-09 17:30:44
1319
原创 mysql 逆向查询树状结构
思路:先定义一个变量 @r,默认值就是最初的code或id,用limit限制查询的次数,也可以理解为层级,新增一列,用户记录 每次查询的时候用变量值作为条件去向上查询的子查询,思路:利用单表的2个父子id或code字段进行查询,数据一条条从上往下查,所以要求按照倒序的排序要有规则,不然查询结果就会不对。需求:在一个具有层级结构的表结构中,我需要根据一个现有的code或id向上所有的父级code或id。一开始我想直接想在代码中用递归的方法逐级向上查询一条数据,直到到达顶层之后就结束。代码实现起来也不是很难。
2023-02-16 16:16:47
334
原创 自动拆箱装箱笔记
Java是一个面向对象的语言,而Java中的基本数据类型不是面向对象的,这在实际使用时存在很多不便。比如:我们在使用带有泛型的类时,如果你把int放到泛型中会提示出错。需要将基本类型转成包装类型。就是把基本类型进行包装成一个对象,在英文中就是boxing(装箱)的意思。在JavaSE5中,为了减少开发人员的工作,Java提供了自动拆箱与自动装箱的功能。自动装箱:将基本类型自动转成对应的包装类。自动拆箱:将包装类自动转换成对应的基本数据类型。虽然包装类自动装箱和拆箱很方便,但当我们拿到一个包装类对象去做运算或
2022-06-19 10:53:07
166
转载 线程池笔记
小明最近打算出去玩,需要预定酒店。小明心想多久都没出来玩了,这次奢侈一把,定个好点的房间吧。于是,拿起电话打给酒店前台客服,小明:你好,请问是XX酒店吗?我想定一个总统套房。前台:您好,好的,我先帮您看下还有没有总统套房,请您先稍等一下。小明:好的。前台:您好,很抱歉,由于最近是假期,今天的总统套房都已经被定满了,明天可能会有空房哦。您那边是打算什么时候入住呢?小明:刚好是明天要入住,但是呢,因为最近人很多,都在定酒店。所以前台小姐姐帮我看下明天预约总统套房的人数是多少,预约人数有没有满。前台:好的,这边帮
2022-06-17 12:38:37
193
原创 桥接模式笔记
主要作用是通过将抽象部分与实现部分分离,把多种可匹配的使用进行组合。说白了核心实现也就是在A类中含有B类接口,通过构造函数传递B类的实现可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调
2022-04-08 17:39:41
169
原创 fastJson JSON.toJSON 序列化为null
原因:用到了lombok 的以下写法@Accessors(chain = true,fluent = true)chain = true 可以把setter方法的返回值变成自己,以便于链式的写法fluent = true 给set和get的方法,去除get或set前缀,命名为fieldName(),而不是例如setFieldName这就导致了类中的属性是没有get和set前缀的方法,下面这fieldInfoList 就是空的最终结果JSON.toJSON(实体类)返回值..
2022-04-06 20:33:06
805
原创 Spring this调用当前类方法无法拦截
先给出代码示例package com.example.demo.service;import org.springframework.stereotype.Service;@Servicepublic class ProxyService { public void testA(){ System.out.println("进入A"); this.testB(); } public void testB() { System.
2022-03-18 17:14:31
679
原创 简单JDK动态代理demo
动态代理demo/** * @Description: 定义一个女孩,声明这个女孩想干的事 */public interface Girl { void date(); void watchMovie();}/** * @Date: 2022/3/5 * @Version: 1.1 * @Description: 定义一个可爱美丽的热辣美女 */public class HotGirl implements Girl { public Ho
2022-03-05 12:04:44
405
原创 java中复习部分继承关系
前提:1、当一个类中没有声明构造函数的时候,系统会给这个类声明一个默认无参的构造函数2、子类的初始化过程中都会先去初始化父类 ,即会调用super方法3、super方法必须只能构造函数中的第一条语句在继承关系中1、子类和父类都没有声明构造函数的时候,系统会给这2个类指定一个无参的构造函数且子类中无参构造函数是默认调用super()父类的无参构造函数的。2、父类中有声明多个构造函数的,子类可以在构造函数中用super方法使用父类任意一个构造函数3、父类中声明的构造函数,子类中的构造函数可以完
2022-02-17 11:14:07
334
原创 spring 总结错误2
在spring中允许存在一个bean类型下的多个bean,每个bean的name要求不一样。1、当我们在使用这个类型bean时,需要具体指定是什么名称的bean,不然就会出错。默认情况下 bean的名称是首字母的小写,但是也有例外。可以通过查看下面的代码得到java.beans.Introspector#decapitalize如果这个bean的name 首字母和第二个字母都是大写就直接返回它本身的类名作为bean名,如果长度大于0不为null那么bean名就是类名首字母小写。我们也可以
2022-02-12 17:17:14
512
原创 spring 总结错误1
1、在application的启动类中默认的扫描路径是启动类的路径,要想自己的类能编译出来,需要放到同一路径或这个路径下,又或者用ComponentScan指定需要编译类的路径。可以通debug 类org.springframework.context.annotation.ComponentScanAnnotationParser#parse 下的 basePackages查看真实路径2、在spring中用注解@Service修饰类时,spring容器会自动帮我生成这个bean并放入到容器中,如果
2022-02-10 16:38:07
455
原创 javax 和hibernate 的NotBlank
问题:hibernate版本在5 的时候,如果你用了 import javax.validation.constraints.NotBlank;在校验的时会报错HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.String'. Check configuration for 'updateInfo.paramD
2022-02-09 17:07:40
2476
1
原创 idea启动时候报错,无法加载到Could not resolve placeholder ‘my.userName‘ in value “${my.userName}“
思路:明明在nacos有配置这个参数,不应该会拿不到。代码也没有错,放在其他模块下可以运行,那为什么还会提交说找不到呢。除非是在resources下的bootstrap.properties配置文件中的配置信息没有被读取。 思路:我们知道idea编译的时候会把类和配置文件加载到target包下,打开发现确实没有bootstrap.properties这个配置文件。解决:于是乎就去网上找问题为何会不生成配置文件呢?大致的解决方法有1、看看是不是路径有没有放错,在不在resources下面,看看resou
2022-01-07 11:16:19
2492
原创 java 基础
class son extends parent implements Impl2,这种写法,子类要想得到impl2接口的方法该怎么写呢?1、可以看成,父类先实现impl2接口方法再给到子类去继承。 这样,父类完成实现接口的方法后,通过继承给到子类。子类就“合法”有了impl2的方法2、也可以是先继承父类,再到子类中去写实现impl2接口的方法第一种方法好处是装逼、并且可以实现一种方法的隔离设计。如果再有一个子类son2去继承parent,那么这个son2也是可以有Impl2的方法...
2021-12-10 19:48:09
385
原创 Transactional 默认回滚策略和自定义回滚异常类型
首先:当我们使用声明式注解事务的时候,如果你只写Transactional 的话,方法返回中有写throws Exception 的话,idea会提示你要指定对应可能出现的异常类型。这个时候我就在想,这个事务的默认回滚异常类型是什么?如果我在注解中指定一个对应的回滚异常会发生什么?想是想不出的,只能看源码!!!随即写了个简单的测试类:1:不在事务注解上指定回滚异常类通过debug定位,定位到这个类点击进去找到后你会找到RuleBasedTransactionAttribute这个类中rol
2021-11-04 16:41:14
6729
1
原创 Mybatis-Plus查询时排除某列和更新字段的时候设置为null,忽略实体null判断
1、LambdaQueryWrapper<PlmCommonNoticeEntity> wrapper = Wrappers.lambdaQuery(plmNoticeEntity).select(PlmCommonNoticeEntity.class,info -> !"content".equals(info.getColumn()))2、@TableField(value = "`length`", updateStrategy = FieldStrategy.IGNORE.
2021-10-14 20:56:02
1609
原创 jdk 8 ConcurrentHashMap computeIfAbsent 里面也有死循环
建议使用的时候要避免key的hashcode重复,如果一样是会发生死循环的。例子:Map<String, Integer> map = new ConcurrentHashMap<>(16);map.computeIfAbsent(“AaAa”,key -> {return map.computeIfAbsent(“BBBB”,key2 -> 42);});先调用了 get 方法,如果返回为 null,则调用 putIfAbsent 方法,这样就能不
2021-10-08 13:54:49
400
原创 注解+分组校验在service方法中使用
场景描述之前在controller层中使用注解校验实体属性,现在因为是操作同一个实体类,但是需要在service中同样校验属性,同时还要区别某个属性,因为在这个service方法中并不是所有的属性都想着校验,部分属性是不需要校验的。解决方法1、现在实体类中把想要校验的属性分组,这个分组类可以是内部类这个类之所以要继承Default是因为需要使用它自带的@NotNull或其他的常见注解接着只要在实体类是使用就行@NotNull(message = “是否含运费不能为空”,groups = Che
2021-09-30 18:38:40
791
原创 final的使用
这里写自定义目录标题final的使用修饰基本类型修饰对象final修饰方法和类final的使用修饰基本类型1、在方法外声明一个全局的基本类型可以一直开始就直接赋值,如果不赋值需要在构造函数中给变量赋值。如:number2如果搭配static 和final一起使用的话,就需要你再static代码块中为该变量赋值(static修饰的常量只能在static代码中初始化)2、如果是在方法内部中定义一个final变量,可以先不赋值,但是必须要在使用的时候给这个变量赋值修饰对象修饰变量为对象的时候,必
2021-09-30 14:22:41
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅