面试
文章平均质量分 50
晴天M雨天
某互联网公司高级开发工程师
展开
-
KafkaProducer线程安全吗?
获取Deque,通过synchronized 进行发送,好了我们知道KafkaProducer是线程安全的,但是KafkaTemplate是线程安全的吗?从ConcurrentMap batches;这是我今天面试被问的一个问题,这会回来就来看看源码。先看KafkaProducer的构造函数。如果我们使用KafkaProducer。单例模式,也是线程安全的,官网的话。我们就看send方法是不是安全。双重检测 +volatile。原创 2023-01-30 18:07:53 · 579 阅读 · 0 评论 -
redis红锁算法
3客户端计算获取锁所需的时间通过从当前时间减去步骤1中获得的时间戳,当且仅当客户端能够在大多数实例(至少3个)中获取锁时,获取锁所花费的总时间小于锁有效时间,则认为已获取锁。2在5个实例上依次获取锁,在所有实例中使用相同的key名字和随机值,在步骤2期间,当设置锁再每个实例时,客户端使用与总锁自动释放时间相比小的超时来获取它。首先,我们假设客户端能够在大多数实例中获取锁所有实例都将包含一个具有相同生存时间的密钥,然而,这个key是在不用时间设置的,所以过期也会在不同的时间过期,加锁时客户端执行以下操作。原创 2022-12-15 14:38:49 · 476 阅读 · 0 评论 -
关系型数据库选型MySQL、 Oracle、SQL server、DB2、PostgreSql
数据库对比原创 2022-09-26 08:58:15 · 889 阅读 · 0 评论 -
70. 爬楼梯 递归到记忆化最后动态规划
以上都是自顶向下的编程模式,climbStairs( n-1)+ climbStairs(n-2);这个就是所谓的递推方程,也可以使用自底向上的方式进行计算,就是所谓的动态规划。这道题比较经典,首先想到的就是递归写法。递归进行优化就变成了记忆化搜索。原创 2022-09-21 22:12:20 · 95 阅读 · 0 评论 -
华为机试题素数伴侣
二分图最大匹配(匈牙利算法):素数伴侣顶题目描述若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。输入有一个正偶数N(N≤100原创 2022-06-29 23:54:15 · 109 阅读 · 0 评论 -
深入理解hotspot源码与Linux 内核理解nio与epoll
1首先我们先看一个图理解一下biobio是一种阻塞io,一个服务端只能响应一个线程, 而且是第一个客户端响应完了才能响应第二个谓阻塞方式的意思是指,当试图对该文件描述符进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。优点:编程简单缺点:阻塞效率低代码如下public class SocketServer { public static void main(String[] args) throws IOException {原创 2022-05-25 19:24:31 · 104 阅读 · 0 评论 -
数据库表的设计什么时候可以存在冗余?
数据库表的设计什么时候可以存在冗余?这个是今天的一个面试题,一般我们在设计表的时候至少需要满足第二范式,全满足第三范式可能会有很多表,在一个大型系统中,表的设计肯定是需要做冗余的但是什么时候做冗余呢我来举个例子比如 一个订单表 需要和用户关联 一般情况是订单表加上一个userid 但是你为了不链表查询 在订单表加了一个username,这时候就不需要链表查了。这时候就产生了冗余,而且如果用户改了登录名 这个查询结果就会有问题,所以次数的冗余是不合理的其实把username放到user表 是消除了原创 2022-04-28 17:19:28 · 2259 阅读 · 0 评论 -
java中的关键字
在本章中呢,我们将会学习以不变应万变。这个是不是很厉害啊?那么实际上呢他所讲的主要内容啊就是我们的final关键字,以及呢Java中的不变性。不过由于 final 关键字一共有三种用法,它可以用来修饰变量、方法或者类,而且在修饰不同的地方时,效果、含义和侧重点也会有所不同,所以我们需要把这三种情况分开介绍。我们先来看一下 final 修饰变量的情况。final 修饰变量关键字 final 修饰变量的作用是很明确的,那就是意味着这个变量一旦被赋值就不能被修改了,也就是说只能被赋值一次,原创 2022-02-17 23:54:57 · 125 阅读 · 0 评论 -
cas原理
cas原创 2022-02-16 17:33:56 · 209 阅读 · 0 评论 -
java中锁的使用经验
java 锁 锁竞争 面试原创 2022-01-25 10:30:18 · 405 阅读 · 0 评论 -
高可用 高并发 高性能 相关计算
1高可用下层系统的 SLA 在设计上通常需要高于上层系统的 SLA,如果一个系统的正常运行还依赖多个子系统,如下图所示,系统中有 a、b、c、d 四个子系统,只要其中一个子系统不正常,整个系统就无法正常工作,那么整个系统的 SLA = SLA(a)*SLA(b)*SLA©*SLA(d)。2高并发根据业务服务承载最高值达 270 万 QPS 以及底层 Redis 承载能力 1 万 QPS,我们预留 10% ~ 20% 的余量,可以初步制定出并发指标:业务服务300万QPS,底层资源 8000QPS。原创 2021-07-16 15:45:02 · 762 阅读 · 0 评论 -
深入理解Java对象
你的对象是怎么来的?我们所说的对象创建,其实就是代码操作new的操作,虽然只有简单一行,但是虚拟机在创建对象时候做了什么工作呢?我们可以来深入看以下。1首先jvm在接收到new指令时,首先会去常量池中定位一个类的引用,并查看该类是否已经被加载,如果被加载,就跳过,如果未加载,先执行类的加载。2类加载完成以后,jvm就会给对象分配空间,这里分配空间的方式被分为两种,一种是“指针碰撞”,另一种是“空闲列表”,决定是否使用“指针碰撞”还是“空闲列表”,本质上取决于内存是否规整,也就是跟垃圾回收器有关,一般j原创 2020-10-28 20:37:57 · 89 阅读 · 0 评论 -
一致性Hash和Session共享解决方案
解决什么问题:为了解决用户在一定时间内保持登陆的状态:解决方案 保证session一致性的架构设计常见方法:session同步法:多台web-server相互同步数据 (数据量较小时可以使用)客户端存储法:一个用户只存储自己的数据(安全性低)反向代理hash一致性:四层hash和七层hash都可以做,保证一个用户的请求落在一台web-server上 (常用 简单有效)后端统一存储:web-server重启和扩容,session也不会丢失 redis存储等。(安全系数高 常用)...原创 2020-10-12 19:18:51 · 359 阅读 · 0 评论 -
框架知识
框架知识→ Servlet生命周期Servlet_生命周期:首先加载servlet的class,实例化servlet,然后初始化servlet调用init()的方法,接着调用服务的service的方法处理doGet和doPost方法,最后是我的还有容器关闭时候调用destroy 销毁方法。线程安全问题filter 和 listenerweb.xml 中常用配置及作用要想回答上面的问题,得先了解web.xml文件使用来干什么的。web.xml文件是用来配置:欢迎页、servlet、filter原创 2020-05-24 02:19:50 · 5741 阅读 · 0 评论 -
网络编程面试题总结
网络编程知识→ tcp、udp、http、https 等常用协议tcp协议:传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。三次握手与四次关闭、三次握手流程如下1client向server发送一个消息syn (状态client syn_sent server listen )2server向client 发送syn+ack, client 收到server发送的syn+ack (状态cl原创 2020-05-11 20:55:51 · 413 阅读 · 0 评论 -
java面经并发编程总结
在面试中并发编程是必然会被问到的一个问题,我结合自身面试经验和对大厂面试题分析,经过知识梳理,总结有以下几个部分。1理解线程的状态转换、(理解这个是基础,有助于后续理解线程之前协作,线程池等)2线程的同步与互斥。CAS、synchronized 和 lock。3线程池的运作机制,实现方式,使用场景。4以及 JUC 中常用的工具类。5死锁6线程通讯7延伸各种锁机制的理解深刻...原创 2020-04-05 19:20:58 · 226 阅读 · 0 评论 -
Java面试基础篇详解
1Java 基础知识面向对象→ 什么是面向对象面向对象、面向过程 略面向对象的三大基本特征和五大基本原则答java是一个面向对象的语言。封装、继承、多态是面向对象的三个特征。五大基本原则分别是:单一职责(同一件事用同一个类,用参数来区分细节)、开放封闭(一旦开发好一个功能即能独立运转,新的功能随时能追加,但与之无关)、替换(动态绑定不影响调用者功能)、依赖倒置(接口和实现分离,调用者声...原创 2020-03-30 23:22:55 · 184 阅读 · 0 评论