面试
文章平均质量分 59
C18298182575
跳出舒适区
展开
-
Spring循环依赖原理及底层源码解析
当B创建完了之后,A继续进行生命周期,而A在完成属性注入后,会按照它本身的逻辑去进行AOP,而此时我们知道A原始对象已经经历过了AOP,所以对于A本身而言,不会再去进行AOP了,那么怎么判断一个对象是否经历过了AOP呢?这是难点,基于上面的场景想一个问题:如果A的原始对象注入给B的属性之后,A的原始对象进行了AOP产生了一个代理对象,此时就会出现,对于A而言,它的Bean对象其实应该是AOP之后的代理对象,而B的a属性对应的并不是AOP之后的代理对象,这就产生了冲突:B依赖的A和最终的A不是同一个对象。转载 2023-06-27 10:55:43 · 92 阅读 · 0 评论 -
面试问题记录
面试点redis分布式锁,一致性hashhttps://www.cnblogs.com/javazhiyin/p/13839357.html设计模式算法String @mysql缓存对比jvmIOspringboothttps://www.jianshu.com/p/5901da52ca09springCloudhttps://blog.csdn.net/oldshaui/article/details/906751https://blog....原创 2022-02-28 16:26:40 · 2482 阅读 · 0 评论 -
面试问题记录
面试点redis分布式锁,一致性hashhttps://www.cnblogs.com/javazhiyin/p/13839357.html设计模式算法String @mysql缓存对比jvmIOspringboothttps://www.jianshu.com/p/5901da52ca09springCloudhttps://blog.csdn.net/oldshaui/article/details/906751https://blog....原创 2022-02-28 16:18:59 · 8124 阅读 · 0 评论 -
Spring 如何在一个事务中开启另一个事务?
这样的情景可能不常见,但是还是会有的,一旦遇到,如果业务比较复杂,就会很麻烦,但是还是有解决的方案的,比如将一个service方法拆成两个方法,也就是将两个操作的事务分开。但是这只适用与业务比较简单的,如果出现多次数据库的写操作,而我们调用的系统只需要其中一个写操作的最新数据,如果我们将它分开,那么如果调用目标系统出现异常的时候,那么之前的写操作就不能回滚了。举个简单的例子:@ServicepublicclassServiceA{@Transactionalpubli...转载 2022-01-11 11:02:07 · 428 阅读 · 0 评论 -
Spring的核心思想,依赖注入
依赖注入是面型接口编程的一种体现,是Spring的核心思想。事实上依赖注入并不是什么高深的技术, 只是被Sping这么以包装就显得有些神秘。classMain{interfaceLanguage{voidprint(String s);}staticclassJavaimplementsLanguage{@Overridepublicvoidprint(String x){...转载 2022-01-11 10:56:17 · 231 阅读 · 0 评论 -
go on
essearch after 实现原理,快在哪里倒排索引原理字典数据结构数据请求详细过程时间复杂度同步延迟mysql分页查询 200 10;查询300万 -100数据库锁死锁redis数据预热分片问题架构java接口限流单继承多实现原理jwt token过期机制反射String a = new String(abc);controller单例 变量问题@Autowried 单例网络通讯socketsock原创 2021-12-30 23:27:45 · 1248 阅读 · 0 评论 -
MySQL百万级数据分页查询及优化
点击蓝色“程序猿DD”关注我哟加个“星标”,不忘签到哦来源:https://www.cnblogs.com/geningchao关注我,回复口令获取可获取独家整理的学习资料:-001:领取《Spring Boot基础教程》-002:领取《Spring Cloud基础教程》- 003:领取《Java开发规范1.5》(最新版)方法1: 直接使用数据库提供的SQL语句 语句样式:MySQL中,可用如下方法: SELECT * FROM 表名称 LIM...转载 2021-12-30 23:00:24 · 202 阅读 · 0 评论 -
记录一个Lock和sychronized应用及双检锁
synchronied场景:数据存入redis,并读取缓存。app用户读取,量较大逻辑1.先读取缓存,判断缓存中是否有值,有返回,无,继续执行2.对当前缓存类(CacheTemplateService)对象(this)加锁3.再次从缓存中获取数据,再次判断,有数据返回,无,继续执行为什么这里再次判断缓存中是否有锁,加入不判断,如果有大量请求等待持有锁(在synchronized处等待),当持有锁线程执行结束后(已写入缓存),就会有另外一个线程进入同步代码块,又会去查询数据库,写入缓存原创 2021-12-28 08:56:56 · 517 阅读 · 0 评论 -
synchronized
synchronized 原理概念:线程 对象 对象锁 对象的monitor,监视器锁所有对象都有一个monitor,线程访问,想持有对象锁时(占有monitor),判断monitor的值是否为0,是加锁成功,注意一个线程可多次对一个对象加锁成功,monitor累加,(可重入),其他线程想访问持有对象锁,判断是否为0,不是0,无法持有锁。自旋多线程访问synchronized修饰的内容时,一个持有锁,其他线程会“阻塞”,阻塞不好,涉及用户态内核态的切换解决:让等待锁的线程-忙循环,就是自原创 2021-12-28 09:28:16 · 140 阅读 · 0 评论 -
可重入锁详解(什么是可重入)
可重入锁详解概述什么是 “可重入”,可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。例如package com.test.reen;// 演示可重入锁是什么意思,可重入,就是可以重复获取相同的锁,synchronized和ReentrantLock都是可重入的// 可重入降低了编程复杂性public class WhatReentrant { public static void main(String[] args) { new Thread(ne...转载 2021-12-24 09:53:55 · 312 阅读 · 0 评论 -
Controller是单例还是多例
@RestController@RequestMapping("single")//@Scope("prototype")public class ControllerSingle { private int i = 1; @GetMapping("thread1") public Integer thread1() { i++; return i; } @GetMapping("thread2") public Integer thread.原创 2021-12-23 23:13:11 · 800 阅读 · 0 评论 -
String a = new String(“abc“); 到底创建了几个对象
Java String a=new String("ABC")的创建 - Summer1218 - 博客园String a = new String("a");创建了几个对象?_csdn_yaohailong的博客-CSDN博客结论:一个或两个盗个图1.不过这个图有一点应该标错了,s2应该=0x001,指向方法区中常量池地址,不是堆中的地址2.分清引用 地址 地址存的是什么 引用的值 == equals引用:指s1,s2地址:堆中地址 0x0001 和 方法区地址0...原创 2021-12-23 22:53:48 · 811 阅读 · 0 评论 -
Spring 如何解决循环依赖?
在关于Spring的面试中,我们经常会被问到一个问题,就是Spring是如何解决循环依赖的问题的。这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出个中奥秘。本文主要针对这个问题,从源码的角度对其实现原理进行讲解。1. 过程演示关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,读者朋友一定要明白一点就是,一个完整的对象包含两部分:当前对象实例化和对象属性的实例化。在Spring中,对...转载 2021-12-21 14:28:38 · 121 阅读 · 0 评论 -
树形数据结构
树二叉树 极端情况变成链表平衡二叉树 左右高度不超过1,弊端 同二叉树一个节点只存了一个键值,导致节点很多,很高,很多磁盘IOB树 一个节点 相当于一页page 一个节点存储多个数据(key+value),一个节点包含多个子节点B+树 非叶子节点不存数据,只存键,叶子节点存键值(包含数据),所以每个节点(一页默认16kb,可以存储更多键值)可以存储更多的键,页之间通过双向链表关联,每一页通过单向链表关联,每页都是顺序存储,范围查找,排序很快。...原创 2021-12-21 09:17:09 · 95 阅读 · 0 评论 -
事务传播机制
/** * 事务传播机制,被调用放事务中加入属性 @Transactional(propagation = Propagation.REQUIRED),进行控制 */@Slf4jpublic class TransactionPropagation { private void a() { log.info("hello i`m a"); } /** * 默认 * A调B,当前(A)没有事务,自己(B)新建一个事务; 有(A)事务,(B)加入(此时.原创 2021-12-16 16:02:55 · 66 阅读 · 0 评论 -
双亲委派
原创 2021-12-16 15:13:16 · 62 阅读 · 0 评论 -
并发容器ConcurrentHashMap——JDK1.7与JDK1.8区别
在Java常用的容器HashMap存在着线程不安全的问题,其中JDK1.7与JDK1.8的线程不安全会出现不同的情况:在多线程情况下,JDK1.7在HashMap在扩容时会造成环形;在JDK1.8中可能会发生数据覆盖。1、JDK1.7下的ConcurrentHashMapConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment实际继承自可重入锁(ReentrantLock),在ConcurrentHashMap里扮演锁的角色;HashEntry则用转载 2021-12-15 15:33:25 · 827 阅读 · 0 评论 -
努力奋斗吧
1.并发三大特性原子性可见性有序性volatitle 可见 有序,无法保证原子synchronized 保证三者AtomicInteger volatitle+cas周阳 高并发原子性:保证以下四步原子性1.i 从主存取到工作内存2.i++3.保存到工作内存4.刷到主内存可见:其他现场工作内存变量无效,重新从主存获取最新变量有序:禁止指令重排final 修饰变量会缓存 禁止指令重排...原创 2021-12-16 16:22:09 · 84 阅读 · 0 评论 -
threadLocal
场景:1.全局数据传输 springsecurity 存储用户信息2.线程间数据隔离 rocketmq 获取队列索引原创 2021-12-14 22:37:31 · 193 阅读 · 0 评论 -
ThreadLocal 原理和使用场景分析
ThreadLocal 不知道大家有没有用过,但至少听说过,今天主要记录一下 ThreadLocal 的原理和使用场景。使用场景直接定位到 ThreadLocal 的源码,可以看到源码注释中有很清楚的解释:它是线程的局部变量,这些变量只能在这个线程内被读写,在其他线程内是无法访问的。 ThreadLocal 定义的通常是与线程关联的私有静态字段(例如,用户ID或事务ID)。变量有局部的还有全局的,局部变量没什么好说的,一涉及到全局,那自然就会出现多线程的安全问题,要保证多线程安全访问,不出现.转载 2021-12-06 18:14:04 · 271 阅读 · 0 评论 -
Java里String str = new String(“Hello“);会创建几个对象?
谈到这个问题首先得知道String的两种赋值方式: 第一种是通过“字面量”赋值。 例如String str="hello"; 第二种是通过new关键字创建新对象。例如String str=new String("hello");这两种方式到底有什么不同?程序执行的时候内存到底有几个实例?实例存在哪?字面量又存在了哪里?变量又存在哪?概念很容易搞混。下面我们一个个的讲。虚拟机内存主要分为三块: 堆:存放对象实例和数组。 栈:存放基本类型,以及对象的引用。 ...转载 2021-12-01 23:49:52 · 1359 阅读 · 0 评论 -
努力奋斗..
登录—专业IT笔试面试备考平台_牛客网jvm内存原创 2023-04-13 16:01:11 · 75 阅读 · 0 评论 -
JVM内存
大多数 JVM 将内存区域划分为Method Area(Non-Heap)(方法区),Heap(堆),Program Counter Register(程序计数器),VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack(本地方法栈),其中Method Area和 Heap是线程共享的 ,VMStack,Native Method Stack和Program Counter Register 是非线程共享的。为什么分为线...转载 2021-12-01 22:12:51 · 78 阅读 · 0 评论 -
JVM原理和调优
面试必问:JVM原理和调优(附面试题)一、详解JVM内存模型二、JVM中一次完整的GC流程是怎样的三、GC垃圾回收的算法有哪些四、简单说说你了解的类加载器五、双亲委派机制是什么,有什么好处,怎么打破六、说说你JVM调优的几种主要的JVM参数七、JVM调优八、类加载的机制及过程九、Jdk1.7到Jdk1.8 java虚拟机发⽣了什么变化?十、你们项目如何排查JVM问题 ?十一、深拷贝和浅拷贝十二、说⼀下JVM中,哪些可以作为GC root十三、JVM诊断工具有哪些?十四、为什么要使转载 2021-12-01 10:55:35 · 131 阅读 · 0 评论 -
cpu升高问题排查
top查找哪个进程占用高,找进程PIDtop -HP 进程PIDprintf "%x\n" 线程ID(16进制) 注意这里是16进制,直接用线程ID会报错,如下线程转16进制printf "%x\n" 18076jstack 线程16进制 打印线程堆栈信息,找问题所在jmap 下载异常线程文件jmap -dump:format=b,file=serviceDump.dump 线程16进制jmap -dump:format=b,file=ser...原创 2021-12-01 10:44:20 · 93 阅读 · 0 评论 -
深入理解Java中的volatile关键字
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在前一篇文章中,我们也介绍了synchronized的用法及原理。本文,来分析一下另外一个关键字——volatile。本文就围绕volatile展开,主要介绍volatile的用法、volatile的原理,以及volatile是如何提供可见性和有序性保转载 2021-11-17 09:48:16 · 84 阅读 · 0 评论 -
Redis 的字符串是这样实现的…
本篇会讲以下内容: Redis字符串的实现 Redis字符串的性能优势 Redis字符串的实现Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS1.SDS 代码结构struct sdshdr{ // 记录已使用长度 int len;转载 2021-11-04 09:58:03 · 107 阅读 · 0 评论 -
面试
1.,分布式服务2,redis过期策略服务挂了怎么办恢复机制3,分表维度,时间维度4,mysql隔离级别5,缓存击穿,穿透6,springcloud配置文件加载顺序7,webservice8,索引类型,与主键区别9,http tcp协议...原创 2019-07-31 18:59:45 · 226 阅读 · 0 评论 -
理解Spring框架中Bean的作用域
本篇介绍Spring Bean实例的作用范围,Spring Bean实例的作用范围由配置项scope限定。通过本篇的学习,可以达成如下目标。● 应用scope配置项配置Bean的作用域● 应用单例模式singleton● 应用原型模式prototype1、作用域scope配置项作用域限定了Spring Bean的作用范围,在Spring配置文件定义Bean时,通过声...转载 2019-07-09 18:05:16 · 395 阅读 · 0 评论 -
面试官最爱的volatile关键字
来源:juejin.im/post/5a2b53b7f265da432a7b821c在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来,深入地话还可以考察JVM底层实现以及操作系统的相关知识。下面我们以一次假想的面试过程,来深入...转载 2019-02-27 10:12:22 · 149 阅读 · 0 评论 -
阿里蚂蚁金服中间件6轮面试!实拍题目和6点血泪总结!
蚂蚁金服一面:分布式架构 50分钟1、个人介绍加项目介绍20分钟2、微服务架构是什么,它的优缺点?优,1,单一业务,低耦合,多团队开发;缺:运维成本,分布式事物,重复开发。3、ACID CAP BASE理论4、分布式一致性协议,二段、三段、TCC,优缺点5、RPC过程6、服务注册中心宕机了怎么办?7、微服务还有其他什么组件8、分布式架构与微服务的关系...转载 2019-01-10 11:02:57 · 725 阅读 · 0 评论