xuxu1116
中国科学院大学 硕博连读 主要研究方向多模态算法 aigc生成技术,也会分享一下工程问题,因为一个合格的算法工程就是要算法和工程两手抓
展开
-
面试题:post为什么会发送两次请求?
最近粉丝在字节面试中遇到这样一个面试题,这个问题也是前端面试的高频问题,因为在前端开发的日常开发中我们总是会与post请求打交道,一个小小的post请求也是牵扯到很多知识点的,在这给大家细细道来。同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。如果两个 URL 的协议、主机和端口都相同,我们就称这两个 URL 同源。协议:协议是定义了数据如何在计算机内和之间进行交换的规则的系统,例如 HTTP、HTTPS。原创 2024-02-07 08:30:00 · 462 阅读 · 0 评论 -
面试题:如何使用 Redis,打造一款 Feed 流系统?
Feed:Feed 流中的每一条状态或者消息都是 Feed,比如微博中的一条微博就是一个 Feed。Feed流:持续更新并呈现给用户内容的信息流。每个人的朋友圈,微博关注页等等都是一个 Feed 流。推拉结合存在一个弊端,就是刷新自己的Feed流时,大V的个人页Timeline 的读压力会很大。不使用大V/普通用户的优化方式,使用对活跃粉丝采用推模式,非活跃粉丝采用拉模式。完全使用推模式就可以彻底解决这个问题,但是会带来存储量增大,大V Feed。原创 2024-02-07 08:30:00 · 57 阅读 · 0 评论 -
面试题:为什么 list.sort() 比 stream().sorted() 要更快?
但是,假设我们要对一个list排序,得先把list转成stream流,排序完成后需要将数据收集起来重新形成list,这部份额外的开销有多大呢?看到一个评论,里面提到了list.sort()和list.strem().sorted()排序的差异。说到list sort()排序比stream().sorted()排序性能更好,但没说到为什么。可以看到,list sort()效率确实比stream().sorted()要好。可以发现,集合转为流再收集回来的过程,肯定会耗时,但是它占全过程的比率并不算高。原创 2024-02-06 08:30:00 · 195 阅读 · 0 评论 -
面试题:如何设计出健壮的秒杀系统?
秒杀系统相信很多人见过,比如京东或者淘宝的秒杀,小米手机的秒杀,那么秒杀系统的后台是如何实现的呢?我们如何设计一个秒杀系统呢?对于秒杀系统应该考虑哪些问题?如何设计出健壮的秒杀系统?秒杀流程图:这就是我设计出来的秒杀流程图,当然不同的秒杀体量针对的技术选型都不一样,这个流程可以支撑起几十万的流量,如果是成千万破亿那就得重新设计了。比如数据库的分库分表、队列改成用kafka、redis增加集群数量等手段。原创 2024-02-06 08:30:00 · 533 阅读 · 0 评论 -
面试题:SpringBoot 在打包部署的时候打包成 jar 和 war 有什么不同?
我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar项目名.jar的方式运行,没任何问题,为什么这里不需要tomcat也可以运行了?然后我打包成war放进tomcat运行,发现端口号变成tomcat默认的8080(我在server.port中设置端口8090)项目名称也必须加上了。原创 2024-02-05 08:30:00 · 496 阅读 · 0 评论 -
面试题:Redis 分布式锁存在什么问题 ?如何解决 ?
答:可以通过添加锁标识来解决.前面我们使用 set 命令的时候,只使用到了 key,那么可以给 value 设置一个标识,表示当前锁归属于那个线程,例如 value=thread1,value=thread2…原创 2024-02-05 08:30:00 · 383 阅读 · 0 评论 -
面试题:100万条数据查询,不能用分页,该怎么优化?
面试官:“我们公司是做数据分析的,每次需要从数据库中查询100万条数据进行分析,不能用分页,请问怎么优化sql或者java代码呢?如果用普通查询需要5分多分钟才查询完毕,所以我们用索引加多线程来实现。索引这个方面我还是不太了解,大家懂的可以优化索引。今天去面试时hr问了个关于大量数据查询的问题。测试结果20秒内,比之前快了好多。耗时5秒左右,可以满足业务需求。修改完成后我们再测试一波–>controller类编写。编写完成后我们测试一波–>然后要生成100万条数据。目前基本的查询已经写完。原创 2024-02-04 08:30:00 · 304 阅读 · 0 评论 -
面试题:Tomcat 为什么要破坏 Java 双亲委派机制?
我想,在研究tomcat 类加载之前,我们复习一下或者说巩固一下java 默认的类加载器。楼主以前对类加载也是懵懵懂懂,借此机会,也好好复习一下。翻开了神书《深入理解Java虚拟机》第二版,p227, 关于类加载器的部分。代码编译的结果从本地机器码转变成字节码,是存储格式的一小步,却是编程语言发展的一大步。Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以呗虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。原创 2024-02-04 08:30:00 · 938 阅读 · 0 评论 -
面试题:SpringBoot 最大连接数及最大并发数是多少?
每个Spring Boot版本和内置容器不同,结果也不同,这里以Spring Boot 2.7.10版本 + 内置Tomcat容器举例。原创 2024-02-03 08:30:00 · 1136 阅读 · 0 评论 -
面试题:为什么MySQL不建议使用NULL作为列默认值?
今天来分享一道美团高频面试题,5 分钟搞懂“为什么 MySQL 不建议使用 NULL 作为列默认值?对于这个问题,通常能听到的答案是 使用了 NULL 值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引.所以上述说法有漏洞.着急的人拉到最下边看结论。原创 2024-02-03 08:30:00 · 1047 阅读 · 0 评论 -
面试题:为什么 MySQL 不推荐使用 join?
1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程3.如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话**业务逻辑中可以控制处理。原创 2024-02-02 08:30:00 · 503 阅读 · 0 评论 -
面试题:synchronized 到底能不能禁止指令重排序?
方法的时候,也并不会出现任何问题,因为使用了同步锁,每个一加锁执行的方法都变成了串行,将并发执行变成了串行,当t2线程获取到锁然后执行的时候,t1早已经释放了锁,此时instance也已经早就被实例化好了。所以说指令重排序在单线程中是不会有任何问题的,但是一旦涉及到多线程的情况,那么指令重排序可能会带来意想不到的结果。它的本质是让多个线程在调用synchronized修饰的方法时,由并行(并发)变成串行调用,谁获得锁谁执行。首先一定要明确:指令重排序和有序性是不一样的。a)、DCL双重检查代码。原创 2024-02-02 08:30:00 · 903 阅读 · 0 评论 -
面试题:如何遍历 Redis 中的海量数据?
有时候我们需要知道线上的redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?今天给大家分享一个小知识点!这个是面试经常会问到的,也是我们小伙伴在工作的过程经常用的,一般小公司,不会有什么问题,但数据量多的时候,你的操作方式不对,你的绩效就会被扣哦,哈哈。!!原创 2024-02-01 08:30:00 · 548 阅读 · 0 评论 -
面试题:Feign第一次调用为什么会很慢?
首先要了解 Feign 是如何进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient 之间的关系,微服务通过不论是 eureka、nacos 也好注册到服务端,Feign 是靠 Ribbon 做负载的,而 Ribbon 需要拿到注册中心的服务列表,将服务进行负载缓存到本地,然后 FeignClient 客户端在进行调用,大概就是这么一个过程。原创 2024-02-01 08:30:00 · 1143 阅读 · 1 评论 -
面试题:说一下Spring Bean 实例化过程?
对于写Java的程序员来说,Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的红利的同时,我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,本期我们就一起来讨论一下Spring中Bean的实例化过程。这里我们并不会详细的分析源代码,只是给出Spring在完成哪些工作的时候使用到了什么类,这些类具体的职责都是什么,如果我们要弄清楚SpringBean实例化的内幕与详细信息,那么可以看哪些源代码?原创 2024-01-31 08:30:00 · 969 阅读 · 0 评论 -
面试题:谈谈分布式系统中的补偿机制如何设计?
我们知道,应用系统在分布式的情况下,在通信时会有着一个显著的问题,即一个业务流程往往需要组合一组服务,且单单一次通信可能会经过 DNS 服务,网卡、交换机、路由器、负载均衡等设备,而这些服务于设备都不一定是一直稳定的,在数据传输的整个过程中,只要任意一个环节出错,都会导致问题的产生。这样的事情在微服务下就更为明显了,因为业务需要在一致性上的保证。也就是说,如果一个步骤失败了,要么不断重试保证所有的步骤都成功,要么回滚到以前的服务调用。原创 2024-01-31 08:30:00 · 1268 阅读 · 0 评论 -
面试官:Java中Class.forName和ClassLoader到底有啥区别?
最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。原创 2024-01-30 08:30:00 · 886 阅读 · 0 评论 -
Arrays.asList() 隐藏的陷阱,你避开了吗?
在Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一个不太常见但需要注意的坑。本文将深入探讨Arrays.asList()的使用,揭示其中的陷阱,并提供解决方案。Arrays.asList()方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是java.util.ArrayList对象,而是Arrays内部的ArrayList对象。原创 2024-01-30 08:30:00 · 971 阅读 · 0 评论 -
面试题:Java 中如何使用枚举来消除 if/else ?
不知道从什么时候开始,Java 程序员总想着消除 if else。基于此,我们来重新学习一下 Java 中的枚举类型。用它来消除部分 if else 吧。为什么现在要去重新学习呐?因为在刚开始学习 Java 的时候,多数人对于枚举这一块的学习不太重视。工作之后呐,也很少有程序员认真用过枚举。导致对枚举这个数据类型不太明白,直到我使用枚举来消除 if else,同事觉得用的还挺好,这里给大家分享一下。枚举是什么意思呐?原创 2024-01-29 08:30:00 · 1709 阅读 · 0 评论 -
面试题:微服务的4种部署策略,你都清楚吗?
在项目迭代的过程中,不可避免需要上线。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。上面所说难免有些抽象, 举一个情景例子, 假如你是微博项目负责人员, 现在新版本较原来的老版本有很大的改变, 这设计到服务架构、前端UI等等, 经过测试功能没有障碍, 那么这时候如何让用户切换到新的版本呢?显而易见, 第一次发布的应用是没有所谓的这个问题的, 这种如何发布的思考只会出现在后面的版本迭代中。原创 2024-01-29 08:30:00 · 1710 阅读 · 0 评论 -
面试题:说一下for 与 foreach 的区别 ?
for与foreach都可以遍历数组/集合,不过for则在较复杂的循环中效率更高。foreach不可以删除/修改集合元素,而for可以foreach和for都可以修改元素里面的属性所以相比较下来for循环更为灵活。原创 2024-01-28 08:30:00 · 352 阅读 · 0 评论 -
面试题:Spring在多线程环境下如何确保事务一致性
本文给出的只是一个方法,为了实现多线程事务一致性,我们还有很多方法,例如和本文一样的思想,直接利用JDBC提供的API来手动控制事务提交和回滚,或者可以尝试采用分布式事务的思路来解决问题。大家之所以会被这个问题难住,主要是因为对Spring框架提供的便捷声明式事务支持中毒太深,以至于脑海中对事务的认知完全停留在@Transactional注解的层面,多了解底层基础设施,才能做到遇事不慌。原创 2024-01-28 08:30:00 · 1736 阅读 · 0 评论 -
Redis 可以代替 MySQL 作为数据库吗?
当使用Redis作为数据库时,以下是一些基本的代码示例。原创 2024-01-27 08:30:00 · 923 阅读 · 0 评论 -
面试题:同一份数据,Redis为什么要存两次?
在 Redis 中,有一种数据类型,当在存储的时候会同时采用两种数据结构来进行分别存储,那么 Redis 为什么要这么做呢?这么做会造成同一份数据占用两倍空间吗?本文主要分析了集合对象和有序集合对象的底层存储结构 intset 和 skiplist 的实现原理,并且重点分析了有序集合如何实现排序以及为何同时使用两种数据结构(字典和跳表)同时进行进行存储数据的原因。原创 2024-01-27 08:30:00 · 828 阅读 · 0 评论 -
面试题:Spring 中的 Service 有多个实现类,怎么注入?
方法一:Controller中注入service的时候使用@Autowired自动注入,@Qualifier(“beanId”)来指定注入哪一个。方法二:Controller中注入service的时候使用@Resource(type = 类名.class)来指定注入哪一个。每个service的impl都可以指定名称(使用@Service(“名称”))Controller中注入service的时候使用名称来指定注入哪一个(使用@Resource(name=“名称”))。原创 2024-01-26 08:30:00 · 610 阅读 · 0 评论 -
面试题:select......for update会锁表还是锁行?
select查询语句是不会加锁的,但是select …for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。没用索引/主键的话就是表锁,否则就是是行锁。原创 2024-01-26 08:30:00 · 444 阅读 · 0 评论 -
面试题:说一下 MyBatis 的 3 种分页方式?
分页是我们在开发中绕不过去的一个坎!当你的数据量大了的时候,一次性将所有数据查出来不现实,所以我们一般都是分页查询的,减轻服务端的压力,提升了速度和效率!也减轻了前端渲染的压力!注意:由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用!PageHelper还是很好用的,也是物理分页!实际上我们一般用第二种比较多:Mapper接口方式的调用。原创 2024-01-25 08:30:00 · 742 阅读 · 0 评论 -
面试题:String s = new String(“xyz“) 创建了几个对象?
到底创建了几个对象呢?1.如果xyz不存在,引用算对象的话,那就是3个2.如果xyz不存在,引用不算对象的话,那就是2个3.如果xyz存在,引用算对象的话,那就是2个4.如果xyz存在,引用不算对象的话,那就是1个当然,我认为引用肯定是不算对象的,最终答案应该是1或者2个,这个面试题说实话不应该出现在初级面试题里。原创 2024-01-25 08:30:00 · 454 阅读 · 0 评论 -
面试题:为什么数据库连接池不采用 IO 多路复用?
如果 DB 和 Web 容器同时使用 NIO,那么调用的DB连接库与必须与容器有一个约定描述「DB的连接管理如何接入Web容器的NIO的驱动代码」。这样是无法形成代码上的约定的。JDBC是一个出现了近20年的标准,它的设计核心是BIO(因为199X年时还没有别的IO可以用):调用者在通过JDBC时执行比如query这样的API,在没有执行完成之前,整个调用线程被卡住。他们的NIO的驱动方式是其运行时的基础——所有要在这个基础上开发的代码都必须遵守同样的NIO+异步开发规范,使用同一个NIO的驱动。原创 2024-01-24 08:45:00 · 626 阅读 · 0 评论 -
面试题: Nginx 的优化思路有哪些?网站的防盗链如何做?
注:本文提到的网址仅不是实际存在的网站,仅作为技术学习举例之用。前几天,有个读者向我吐槽,找了很久的工作,好不容易熬到到了二面(技术面,如果过了就基本定了)。谁知道没有准备充分,被一道题给直接挂掉了。这道题就是:Nginx的优化思路有哪些?网站的防盗链如何做?实际工作中有哪些类似的安全经验?结果支支吾吾半天没讲到重点,结果就可想而知了。。。所以,今天就带大家来一起重新复习一下这方面的知识点。原创 2024-01-24 08:30:00 · 1789 阅读 · 0 评论 -
面试官:说说Spring中@NotEmpty、@NotBlank、@NotNull 的区别和使用
1:@Valid 和 @Validated 两者都可以对数据进行校验,待校验字段上打的规则注解(@NotNull, @NotEmpty等)都可以对 @Valid 和 @Validated 生效;3:@Validated 进行校验的时候,当校验不通过的时候,程序会抛出400异常,阻止方法中的代码执行,这时需要再写一个全局校验异常捕获处理类,然后返回校验提示。4:总体来说,@Validated 使用起来要比 @Valid 方便一些,它可以帮我们节省一定的代码,并且使得方法看上去更加的简洁。原创 2024-01-23 08:45:00 · 413 阅读 · 0 评论 -
面试题:MySQL 单表数据最大不要超过多少行?为什么?
Mysql 的表数据是以页的形式存放的,页在磁盘中不一定是连续的。页的空间是 16K, 并不是所有的空间都是用来存放数据的,会有一些固定的信息,如,页头,页尾,页码,校验码等等。在 B+ 树中,叶子节点和非叶子节点的数据结构是一样的,区别在于,叶子节点存放的是实际的行数据,而非叶子节点存放的是主键和页号。索引结构不会影响单表最大行数,2kw 也只是推荐值,超过了这个值可能会导致 B + 树层级更高,影响查询性能。原创 2024-01-23 08:30:00 · 869 阅读 · 0 评论 -
面试题:简单说一下阻塞IO、非阻塞IO、IO复用的区别 ?
在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型,供大家参考学习。对于计算机而言,任何涉及到计算机核心(CPU和内存)与其他设备间的数据转移的过程就是IO。IO 设备:比如我们最常见的打印机、鼠标、键盘。对IO设备的数据读写。现代操作系统将空间划分为用户空间和内核空间。用户空间:非内核应用程序则运行在用户空间。原创 2024-01-22 08:45:00 · 893 阅读 · 0 评论 -
面试题:SpringBoot项目怎么设计业务操作日志功能?
很久以前都想写这篇文章,一直没有空,但直到现在我对当时的情景还有印象,之所以有印象是因为需求很简单,业务操作日志的记录与查询的功能,但是具体实现真的很烂,具体的烂法会在反面示例里细说,领导以及客户层面很认可,一系列迷之操作,让我印象深刻。业务操作日志记录中包含了用户操作的功能名称、功能描述、操作人、操作时间和操作的参数报文,参数报文之所以选择存储在文件中,是因为正常情况下,是不需要知道具体的参数报文,只有在回滚操作的时候才会用到,可以根据上一次的参数报文逆向操作。原创 2024-01-22 08:30:00 · 1053 阅读 · 0 评论 -
面试题:Linux服务器存在大量log日志,如何快速定位错误?
文章目录针对大量log日志快速定位错误地方tail/head简单命令使用:第一种方式:第二种方式:第三种方式:第四种方式:第五种方式:第六种方式:第七种方式:附加针对大量log日志快速定位错误地方动态查看日志tail -f catalina.ou从头打开日志文件cat catalina.ou可以使用 >nanjiangtest.txt 输出某个新日志去查看[root@yesky logs]# cat -n catalina.out |grep 717892466 >nanji原创 2024-01-21 08:45:00 · 1003 阅读 · 0 评论 -
面试题:设计一个高流量高并发的系统,有哪些要点?
我相信每一位开发同学多多少少都想参与或负责一个高用户、高访问、高并发的系统吧。一来可以增加自己实际的项目经验,有应对高并发场景的解决方案,二来是有个高并发的项目经验无疑是自己简历的一个大大的加分项。但是奈何很多人都没有机会可以参与这样的项目,本文从以下几点介绍一下设计一个高流量高并发的系统需要经历哪些步骤以及考虑哪些因素(文章中的不足之处还请大佬们多多指点)。做好一个高流量高并发的系统,不论前端还是后端,过程中每一个步骤都是至关重要的。原创 2024-01-21 08:45:00 · 969 阅读 · 0 评论 -
面试题:RabbitMQ 有哪几种消息模式?
Rabbitmq 是使用 Erlang 语言开发的开源消息队列系统,基于 AMQP 实现,是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们。消息传递指的是应用程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此通信,直接调用通常是指远程过程调用的技术。原创 2024-01-20 08:45:00 · 881 阅读 · 0 评论 -
面试题:40亿个QQ号,限制1G内存,如何去重?
位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1像上面的这个位图,可以用来表示1,4,6:如果不用位图的话,我们想要记录1,4,6 这三个整型的话,就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是34 = 12个字节,一个字节有8 bit,那么就是 12。原创 2024-01-20 08:45:00 · 921 阅读 · 0 评论 -
面试题:微服务之间的数据依赖问题,该如何解决?
微服务,顾名思义,就是将我们程序拆分为最小化单元来提供服务。在一体化系统中,各个微服务也是不可能独立存在的,那么微服务之间涉及到的数据依赖问题,应该怎么处理呢?我们从场景入手来分析考虑此类问题。这里我们探讨了服务间的数据依赖问题,并给出了目前较为合适的解决方案。其实这里提到的方案不是一个很大众的方案,肯定会存在一些遗漏的问题没考虑,如果你有更好的方案,欢迎讨论。原创 2024-01-19 09:46:27 · 991 阅读 · 0 评论 -
面试官:Cookie 与 Session 是如何实现联动的?
在实际开发中,要求服务器是需要有状态的,比如:当用户完成登陆之后,后续再访问这个网站的时候,服务器就能知道这个用户的身份信息了(前提是浏览器没有清除缓存)。其中Cookie是以键值对结构的字符串来进行储存的,这里的键值对都是程序员自定义的。这里我们可以看到,在第二次的请求中就自动带了Cookie,而且你会发现此时第二次的请求与第一次的响应中的Cookie值是一样的,然后服务器就会根据Cookie里面的sessionId去查找匹配,然后返回对应的页面给浏览器。客户端给服务器的第一次交互,是一个登录请求。原创 2024-01-19 09:33:04 · 814 阅读 · 0 评论