知识点记录

基于Quartz实现分布式任务解决方案!

分布式定时任务,你了解多少?基于Quartz实现分布式任务解决方案!https://cloud.tencent.com/developer/article/2335398

总结一下@SpringBootApplication的用法和作用:

用于标识Spring Boot应用程序的入口类。
整合了@SpringBooConfiguration、@EnableAutoConfiguration和@ComponentScan等注解的功能。
简化了Spring Boot应用的配置和启动过程。
可以通过SpringApplication.run方法启Spring Boot应用程序。

总结一下@SpringBootConfiguration的用法和作用:

用于标识Spring Boot的配置类。
继承了@Configuration注解的功能,可以定义Bean和其他组件。
可以与@EnableAutoConfiguration注解一起使用,实现自动配置的功能。
简化了配置类的编写,减少了重复的注解。

总结一下@EnableAutoConfiguration的用法和作用:

启用Spring Boot的自动配置机制。
自动根据项目的依赖和配置加载相应的Bean。
简化配置,省去大部分的XML配置和手动配置过程。
使用条件注解机制进行条件装配。

总结一下@ComponentScan的用法和作用:

1.启用组件扫描功能。
2.自动扫描并加载符合条件的组件,包括@Controller、@Service、@Repository等。
3.通过basePackages属性指定要扫描的包路径。
4.可以通过excludeFilters属性排除指定的组件。

Thread.sleep(0)

在Java程序中,Thread.sleep(0) 表示让当前执行的线程暂停执行0毫秒,即不进行任何暂停。这个操作可能看起来没有实际作用,但实际上,它在多线程环境中有着特定的用途。

Thread.sleep(0) 的运行结果和作用如下:

  1. 线程调度:当线程执行sleep(0)时,它会释放CPU给其他线程,即使没有实际的睡眠时间。这可以作为一种让出CPU的方式,尤其是在自旋锁(spinlock)的实现中,当线程需要等待某个条件成立,但又不想进入阻塞状态时,可以使用sleep(0)来让出CPU,从而避免长时间占用CPU资源。

  2. 立即响应中断:在执行sleep操作的线程中,如果线程被中断(interrupt() 方法被调用),线程会立即响应中断,并抛出InterruptedException异常。即使sleep(0)没有实际的睡眠时间,线程仍然会检查中断状态,并响应中断。

  3. 避免忙等:在某些情况下,线程可能需要不断地检查某个条件是否满足,如果不满足就需要等待。使用sleep(0)可以在每次检查后让出CPU,避免线程忙等(busy-waiting),这样可以提高程序的整体性能,尤其是在多核处理器上。

  4. 控制执行顺序:在某些复杂的多线程场景中,可能需要控制线程的执行顺序。通过sleep(0),可以在不影响整体执行时间的情况下,让某些线程稍微延迟执行,从而控制线程间的执行顺序。

需要注意的是,sleep(0)并不会释放锁资源,线程仍然持有进入sleep操作时所持有的所有锁。此外,sleep(0)并不保证立即让出CPU,因为线程调度是由操作系统决定的,sleep(0)只是提供了一种建议。

总的来说,Thread.sleep(0) 在某些特定的多线程编程场景中可以提供一种优雅的方式来处理线程间的协作和调度问题。然而,它并不是万能的,开发者在使用时需要根据具体的应用场景和需求来决定是否适合使用。

实现毫米级查询

要实现毫米级查询(即毫秒级查询),你需要考虑多个因素,包括硬件配置、数据库优化、索引设计等。对于一个拥有 400 亿条数据的 OceanBase 数据库,以下是一些可能的考虑:
硬件配置:首先,你需要足够多且性能强大的服务器来支持这样大规模的数据。服务器的 CPU、内存、存储等配置都需要足够强大,以支持高并发的查询请求。
数据库优化:OceanBase 应该提供了一些性能优化的功能,例如分区表、分布式事务等。你需要根据你的查询模式和数据分布情况来进行相应的优化设置。
数据分片和分区:将数据分片和分区可以有效地减少单个查询涉及的数据量,从而提高查询性能。这需要在设计数据库时考虑,并在部署时进行相应的配置。
索引设计:根据你的查询需求,设计合适的索引可以大大提高查询性能。需要注意的是,索引的创建会增加写入操作的开销,所以需要权衡。
负载均衡和集群配置:合理配置负载均衡和集群架构可以确保查询请求能够均匀地分布到各个节点,避免单点瓶颈。
考虑到以上因素,具体需要多少台机器才能实现毫秒级查询,很难在没有更多详细信息的情况下给出确切的答案。通常情况下,这需要进行系统架构设计和性能测试,以找到最优的配置方案。建议你咨询数据库专家或进行性能测试来获取更准确的建议。

2PC宕机的情况

2PC在执行过程中可能发生协调者或者参与者突然宕机的情况,在不同时期宕机可能有不同的现象。

情况一:协调者挂了,参与者没挂
这种情况其实比较好解决,只要找一个协调者的替代者。当他成为新的协调者的时候,询问所有参与者的最后那条事务的执行情况,他就可以知道是应该做什么样的操作了。所以,这种情况不会导致数据不一致。

情况二:参与者挂了,协调者没挂
这种情况其实也比较好解决。如果参与者挂了。那么之后的事情有两种情况:

第一个是挂了就挂了,没有再恢复。那就挂了呗,反正不会导致数据一致性问题。

第二个是挂了之后又恢复了,这时如果他有未执行完的事务操作,直接取消掉,然后询问协调者目前我应该怎么做,协调者就会比对自己的事务执行记录和该参与者的事务执行记录,告诉他应该怎么做来保持数据的一致性。

Oracle分页查询为什么嵌套

Oracle分分页一般查询格式:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21

为什么基于ROWNUM的oracle分页实现,要采用三层嵌套的方式?
1 首先,在没有order by clause的情况下,oracle的查询结果的顺序会是不确定的。如上面的例子。
所以order by的使用是应该的,以免因为index等的原因导致不确定的results order。
2 其次,在order by 和 ROWNUM同时使用时,oracle默认的策略是先为伪列rownum赋值,再order by。
引用
rownum与order by同时存在的问题
当 where 后面有rownum的判断,并且存在order by时候,rownum的优先级高!
  oracle会先执行rownum的判断,然后从结果中order by,很明显是错误的结果啦!就好像学校要取成绩最好的前10名同学
  ,结果这种方法一执行,成了取出10名同学,然后按照成绩的高低排序!
  这点与SQL Server的TOP完全不同,TOP遇上order by,是先执行order by,在分页的;
  解决办法就是先执行order by,然后嵌套执行rownum-----说白啦就是用()改变函数的优先级!

所以,第二层嵌套的目的就是:让结果先order by,再取rownum!
3 再次,因为rownum不可使用 >(=) 来判断的原因,所以需要最外围的第三层嵌套

java内存溢出定位

一、内存溢出问题分类
瞬时流量过大造成的创建大量对象
内存泄漏导致的内存溢出,一般就是程序编码的BUG引起的
二、内存泄漏问题分析
step1: 收集内存泄漏的堆内存异常日志
> 添加HeapDumpOnOutOfMemoryError 和 HeapDumpPath两个参数开启堆内存异常日志:java -jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -Xms4g -Xmx4g -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/tmp/heapTest.log sinaif-XX .jar
step2: 采用系统Linux命令top 查看Java进程内存使用情况;看下这个内存占用情况;举例:系统内存为8G,启动堆内存分配4G, 通过top命令看下Java进程内存占用是否超过50%
step3:再通过 top -Hp pid 查看具体线程占用系统资源
step4: 通过jstack pid 查看具体线程的堆栈信息,排除是否有死锁或者I/O阻塞的问题(检查CPU的使用率和负载情况)
step5:通过 jmap -heap pid 查看堆内存的使用情况,看下老年代的内存是否没有可分配空间
step6: 基本定位出内存泄漏后,具体分析看是什么对象引起的;
step7:jmap -histo:live pid 查看存活对象数量,找出最大的5个对象进行分析
step8: 把step1 设置的堆内存异常文件:heapdump.hprof 下载本地导入到Eclipse MAT 进行分析
step9:导入MAT一般会有提示的:

jsp九大隐含对象,四大作用域

JSP九大隐含对象是指在JSP页面中可以直接使用的预定义变量,它们是:request, response, out, session, application, config, pageContext, page 和 exception。
request: 客户端的请求信息被封装在request对象中。
response: 服务器的响应信息被封装在response对象中。
out: 用于向客户端输出数据。
session: 与请求有关的会话期的内容。
application: 服务器运行的环境和应用程序级别的内容。
config: 服务器的配置信息。
pageContext: 页面上下文,提供了对JSP页面所有对象以及命名范围的访问。
page: 指当前JSP页面本身。
exception: 异常处理相关,只有在包含isErrorPage="true"的页面中才可以使用。

四大作用域指的是:
页面作用域(page scope):仅在当前JSP页面内有效。
请求作用域(request scope):在当前请求内有效,可以通过request.setAttribute()和request.getAttribute()方法设置和获取。
会话作用域(session scope):在当前会话内有效,可以通过session.setAttribute()和session.getAttribute()方法设置和获取。
应用作用域(application scope):在整个应用内有效,可以通过application.setAttribute()和application.getAttribute()方法设置和获取。

js所有内置对象

JavaScript 中的“内置对象”通常指的是由ECMAScript标准定义的对象和类型,包括:
Object
Function
Array
String
Boolean
Number
Symbol
BigInt

以及由JavaScript实现提供的其他对象,如:
Date
RegExp
Error
Math
JSON
还有其他的如 Map, Set, Promise, Reflect, Proxy, WeakMap, WeakSet 等,这些是ES6新增的。
这些对象是JavaScript语言的基础,提供了各种功能,例如,创建对象,操作字符串,进行数学计算等。
由阿里巴巴笔试题看java加载顺序
https://www.cnblogs.com/guodefu909/p/4991612.html

非技术性问题

你未来3-5年的职业规划是什么(埋雷题)
回参考话术:
我目前在XX岗位上处于什么样的阶段,期望未来3年能达到一个什么样的目标(专业型or管理型)。
我未来打算:
1、首先在未来的1年提升自已在XX方面的能力,精进业务水平。
2、然后在未来的2年内,可以独当一面,独立负责一些比较重要或关键的事务,并对结果负责。
3、在3年内,可以将做过的业务进行总结复盘,形成方法论和标准板,同时也希望有机会领导团队完成更加复杂的任务,为公司的发展做出贡献。

你有什么优点和缺点(考察题)
口参考话术:
我认为我个人优点是做事有规划。比如在上家公司任职时,领导给了我一个紧急的xxx任务,在执行的过程中,我会把任务中涉及到的所有与其他人相关的内容都整理出来并罗列成甘特图 时刻把控任条/5况并及时向领导汇报讲度。

如果公司录用你,你如何开展工作(考察题)

口参考话术:
1、入职公司后我会去了解公司每个部门主要负责的工作内容,确保在之后的工作中能快速定位到相关人员,避免无效沟通。(融入团队)
2、同时,我会明确自己的岗位目标和职责,熟悉业务流程后对工作目标进行拆分,并制定详尽的工作计划,严格按照任务的节点去推进并完成工作,并定期向领导请示和汇报自己的工作进度确保项目的正常运行。(熟悉业务+拆分目标执行+获得反馈)
3、在得到有效反馈的基础上,及时复盘和总结自己的工作成果,对自己的工作流程进行进一步的优化选代。

你如何应对工作中的ya力
门参考话术:
我认为在工作中有ya力是常态化的职场现象,而且也无法避免。
重点是如何积极面对和调节(举例)在上一段工作XX项目中感到ya力非常大,原因是接手了一个比较新的领域,但我很快就发现内耗只会更焦虑,如果依靠个人能力无法定位问题,
我开始自己先上网寻找答案边学边做,形成自己的方案后和同事和领导请教讨论。另外我在下班后3/5会去运动,让自己放空调整状态再重新投入到工作之中。

一文搞懂数据库中的“锁”(图文详解)

https://cloud.tencent.com/developer/article/2403364

Java高并发下请求合并处理

https://www.jb51.net/program/2965293ob.htm#_label0

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值