面试
文章平均质量分 67
个人博客主页:wyn-365.club
Coding路人王
V:CaptainWang365
展开
-
字节跳动------剑指offer专题精选谷歌、微软等知名IT企业典型面试题
1. JZ6 从尾到头打印链表输入:{1,2,3}返回值:[3,2,1]public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { //用来存储链表中节点的值。 Stack<Integer> reverse = new Stack<>(); while(listNode != null){ reverse.原创 2021-12-21 14:43:52 · 507 阅读 · 0 评论 -
双指针专项练习-----链表操作
一、双指针法快慢指针的思想。我们将第一个指针 fast 指向链表的第k+1 个节点,第二个指针 slow 指向链表的第一个节点,此时指针fast 与 slow 二者之间刚好间隔 k 个节点。此时两个指针同步向后走,当第一个指针fast 走到链表的尾部空节点时,则此时slow 指针刚好指向链表的倒数第k个节点。1.1 链表中倒数第k个节点 public ListNode getKthFromEnd(ListNode head, int k) { ListNode fast = head原创 2021-12-21 10:50:47 · 472 阅读 · 0 评论 -
Mysql回表与索引覆盖,联合索引问题
一、Mysql为什么可以存储海量数据?1.使用B+引擎,可以减少IO请求,使用的B+树,为N叉树,与普通的二叉树比较起来,高度跟低2.查询效率稳定,每次都从根节点到叶子节点,叶子节点只存储数据3.叶子节点为双向循环链表,且按照关键字大小进行排列,可以有效的进行范围查询,hash索引在等值查询上效率高。二、InnoDB与聚簇索引聚簇索引:数据与索引存放在一起,找到了索引就找到了数据InnoDB:底层由B+树实现,每个节点对应innodb的一个page,page的大小固定为16K,同一页可以有多条数原创 2021-12-12 10:14:09 · 679 阅读 · 0 评论 -
温习大数据框架阿里Flink面试题
1、Flink如何保证精确一次性消费Flink 保证精确一次性消费主要依赖于两种Flink机制1、Checkpoint机制2、二阶段提交机制Checkpoint机制 主要是当Flink开启Checkpoint的时候,会往Source端插入一条barrir,然后这个barrir随着数据流向一直流动,当流入到一个算子的时候,这个算子就开始制作checkpoint,制作的是从barrir来到之前的时候当前算子的状态,将状态写入状态后端当中。然后将barrir往下流动,当流动到keyby 或者sh...原创 2021-11-14 15:35:59 · 426 阅读 · 0 评论 -
温习大数据框架Spark面试题
一、Spark1、你觉得spark 可以完全替代hadoop 么?Spark 会替代 MR,Spark 存储依赖 HDFS,资源调度依赖 YARN,集群管理依赖 Zookeeper。2、Spark消费 Kafka,分布式的情况下,如何保证消息的顺序?Kafka 分布式的单位是 Partition。如何保证消息有序,需要分几个情况讨论。同一个 Partition 用一个 write ahead log 组织,所以可以保证 FIFO 的顺序。不同 Partition 之间不能保证顺序。但是绝大多数原创 2021-11-14 11:08:32 · 864 阅读 · 0 评论 -
redis与mysql数据库数据双写不一致如何解决?
一、高并发执行1.1 正常情况下程序没有问题!!!1.2 网络卡顿 时间延迟数据库真正的结果为6,但是最后改为了10,发现了数据不一致性。二 解决办法2.1 写完删除缓存,每次查询数据库又发生了问题!!!2.2 延迟双删【不考虑】不太确定sleep的时间不确定,不稳定,不能100%解决,延迟很高!!!!吞吐量低!!!2.3 内存队列【不推荐】对基于同一个Key的增删改查操作,放到一个内存队列里面,可以解决性能:麻烦,效率低,并行的任务,串行化了2.4 加锁操作【推荐】原创 2021-11-12 21:37:01 · 962 阅读 · 0 评论 -
Spring源码复习
一、Spring源码1.1 Spring5 依赖准备 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency&原创 2021-11-12 11:06:21 · 671 阅读 · 0 评论 -
Https的CA证书是如何验证其有效性的?
一、证书作用证书验证的过程是使用非对称加密的,客户端对服务器端发起请求,服务器返回一个证书,客户端验证这个证书的合法性,如果这个证书是合法的,那么就生成一个随机值,利用这个随机值作为对称加密的钥匙二、证书包含的信息公钥;持有者信息;证书认证机构(CA)的信息;数字签名及使用的算法;证书有效期;额外信息;为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA 就是网络世界里的公安局、公证中心,具有极高的可信度,所以由原创 2021-11-10 15:33:28 · 5569 阅读 · 0 评论 -
如何手写一个JDK动态代理?
一、动态代理代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性。Java 动态代理机制以巧妙的方式近乎完美地实践了代理模式的设计理念。二原创 2021-11-07 11:25:58 · 161 阅读 · 0 评论 -
切记【阻塞/非阻塞】【FutureTask异步执行】
一、阻塞非阻塞1.1 同步阻塞IO在Java应用中,默认情况下所有的Socket连接的IO都是同步阻塞的例如在java发起的一个socket的read操作大致流程如下:1.Java启动io的read读操作开始,用户线程就进入阻塞状态2.系统接收到read调用,开始准备数据,如果内核数据没有准备好,则内核进行等待。3.内核一直等待完整的数据到达,就会将数据从内核缓冲区复制到用户缓冲区,返回内核结果.4.内核返会结果后,用户线程才会解除阻塞的状态,重新运行。特点:在内核执行IO两个点阶段,用户线原创 2021-10-28 16:08:40 · 1152 阅读 · 0 评论 -
【Semaphore、ReentrantLock、CountDownLatch、Cyclicbarrier、ReadWriteLock】多线程交替执行、顺序执行、同时执行、读写分离执行、生产者消费者
一、交替执行建立3个线程,完成交替执行,按照123123123…打印1.1 使用Lock的ReentrantLock实现public class ThreadPrint { public static void main(String[] args) { Print123 print123 = new Print123(); new Thread(()->{ while (true){ print12原创 2021-10-27 14:57:20 · 372 阅读 · 0 评论 -
Redis连环炮:内存淘汰?事务?分布式锁?分步式限流?异步队列?延时队列?高可用?如何部署?哈希槽?数据库和缓存的数据一致性?
1.Redis 删除过期键的策略(缓存失效策略、数据过期策略)**定时删除:**在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。对内存最友好,对 CPU 时间最不友好。**惰性删除:**放任键过期不管,但是每次获取键时,都检査键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。对 CPU 时间最优化,对内存最不友好。**定期删除:**每隔一段时间,默认100ms,程序就对数据库进行一次检査,删除里面的过期键。至 于要删除多少过期键,以及要检査原创 2021-10-24 14:57:37 · 249 阅读 · 0 评论 -
2022届大厂面试 JUC常考总结版
1.线程和进程有什么区别?线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线原创 2021-10-06 09:17:39 · 195 阅读 · 0 评论 -
如何设计一个秒杀系统???
一、秒杀系统【并发读、并发写】1.秒杀时大量用户会在高并发同一时间同时进行抢购,网站瞬时访问流量激增。2.秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。3.秒杀业务流程比较简单,一般就是下订单减库存。1.1 设计思路1.BlockingQueue阻塞队列限流: 鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。2.redis,MQ削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,.原创 2021-09-28 16:50:15 · 168 阅读 · 0 评论 -
【印象深刻------美团优选】美团凉后,【美团优选】捞起【查漏补缺,应用场景,底层欠缺】
一、面试概况今天是之前面美团java研发凉之后的,美团后端捞起面试,我之前一直是觉得自我感觉良好的,【感觉技术面以及四门专业课=====从来不虚】,结果今天感觉非常的知足,不是说的笔试和面试怎么杨吧,就是我在今天这场面试中,积攒到了很多经验,找到了自身的不足,应该思考的地方,面试的要点,让我很是受益,所以抓紧做一个笔记。二、面试-笔试两个算法:一个是二叉树的先序遍历【做出来了】合并两个有序数组【也做出来了】三、技术面3.1 Redis【一直在干redis连环炮】3.2 说一下redis为什么原创 2021-09-23 22:20:05 · 355 阅读 · 0 评论 -
查漏补缺:CRC冗余码+双向链表插入+实现利用栈括号匹配
一、CRC冗余码二、双向链表的插入p之后插入ss->next = p->next;s->prior = p;p->next = s;p->next->prior = s;三、栈实现括号匹配public boolean isValid(String s){ Stack<Character> stack = new Stack<Character>(); for(char c : s.toCharArray()){ if(原创 2021-09-21 11:11:39 · 98 阅读 · 0 评论 -
OSI七层模型的各个功能?路由器与交换机的区别?冲突域,广播域
一、OSI总结二、路由器与交换机的区别2.1 外观路由器和交换机的外观长得一样一样的,他们有个超级明显的区别,交换机的各个接口上标注的序列数字是有规律的,接口颜色也是一致的。在路由器的接口上我们可以看到标注的数字是有规律的,标注为wan或者internet的接口,这些接口颜色也不一样2.2 网络连接交换机:连接局域网,没办法访问英特网路由器:连接局域网与因特网2.3 网络分配交换机:分配网络数据路由器:会在局域网自动分配IP,实现虚拟拨号2.4 分层,以及寻址交换机:在数据链原创 2021-09-19 19:29:12 · 1098 阅读 · 0 评论 -
JVM调优常用的调优参数
一、堆内存参数配置-Xms10g :JVM启动时申请的初始堆内存值-Xmx20G :JVM可申请的最大Heap值-Xmn3g : 新生代大小,一般设置为堆空间的1/3 1/4左右,新生代大则老年代小-Xss :Java每个线程的Stack大小-XX:PermSize :持久代(方法区)的初始内存大小-XX:MaxPermSize : 持久代(方法区)的最大内存大小-XX:SurvivorRatio : 设置新生代eden空间和from/to空间的比例关系,关系(eden/from=eden/t原创 2021-09-19 16:12:52 · 7381 阅读 · 0 评论 -
一个类从加载到内存到垃圾回收的全过程是什么【类加载机制+对象回收】
一、类加载机制类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。1.1 加载首先通过一个类的全限定名来获取此类的二进制字节流;其次将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;最后在java堆原创 2021-09-15 21:45:15 · 372 阅读 · 0 评论 -
哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址????
一、内存引用知识1.内存引用地址,是指栈中存放的地址,来指向堆中的某个位置。2.int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法二、常见比较2.1 int与Integer、new Integer()进行==比较时,结果永远为true1.Integer与int比较时,Integer会有拆箱的过程,我们可以看看拆箱的代码:@Overridepublic int intValue(){ return value;}直接返回的就是value,因此int与Integer以及new原创 2021-09-15 17:13:30 · 469 阅读 · 0 评论 -
父类 子类 的 静态域,main(),构造代码块,构造方法 如何执行????
一、无继承关系时 public class Test{ public static Test t1 = new Test();//静态变量 //构造块 { System.out.println("blockA"); } //静态块 static { System.out.println("blockB"); } public static void main(String[] ar.原创 2021-09-14 11:09:25 · 165 阅读 · 0 评论 -
Jvm的垃圾回收分代回收?CMS 与 G1的区别?
一、复制算法和标记清理算法复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象两个概念:新生代和年老代新生代:初始对象,生命周期短的永久代:长时间存在的对象整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。Serial New收集器是针对新生代的收集器,采用的是复制算法Parallel New(.原创 2021-09-13 22:03:07 · 311 阅读 · 0 评论 -
LeetCode题【换零钱问题汇总】
一、求换零钱的最大次数请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1 public static int change(int amount, int[] coins) { int[] dp = new int[amount+1]; dp[0] =原创 2021-09-12 20:48:21 · 506 阅读 · 0 评论 -
数组连续最大序列问题----【滑动窗口、动态规划求解】
一、求数组连续最大子序列和// 最大连续子数组的成绩 还有求和 public static int maxSubArray(int[] nums) { int res = nums[0]; int sum = 0; for (int num : nums) { if (sum > 0) sum += num; else sum = n原创 2021-09-10 15:13:30 · 600 阅读 · 0 评论 -
2021-08-22爱奇艺后端笔试【完犊子了-选择20题+编程4道】
一、选择题略二、编程题2.1 SQL查询女生最多的前三科目,以及人数# Student_infoid name gener1 kitty 12 kitt 23 kit 2# Subject_Registerstudentid subjectid1 12 23 2# Subject_infoid name1 math2 science3 chinese在这里原创 2021-08-23 11:02:19 · 254 阅读 · 0 评论 -
回溯法、另辟蹊径法 求数组的全排序
一、回溯法【路径,选择条件,结束条件】回溯法,其实也是决策树,核心代码,就是for循环里面的递归,在递归调用之前【做出选择】,递归调用之后【撤销选择】# 核心代码result = []def backtrack(路径,选择列表): if 满足条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径,选择列表) 撤销选择完整代码:public class Permute { List<List&原创 2021-08-23 10:20:32 · 116 阅读 · 0 评论 -
个人2021-08-21网易云java后端开发编程笔试题目
一、求两个数和比一个值小所有情况题目:给定一个数组,求所有满足两个数之和小于等于一个指定值的数目如:输入:1 2 35输出:3描述: 【1,2】【1,3】【2,3】代码:Scanner sc = new Scanner(System.in); String nums = sc.nextLine(); Integer ans = 0; Integer num = sc.nextInt(); String[] s = nums.原创 2021-08-21 20:51:20 · 298 阅读 · 0 评论 -
说一说Java中的BlockingQueue
一、BlockingQueue简介阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:1.在队列为空时,获取元素的线程会等待队列变为非空。2.当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。多线程环境中,通过队列可以很容易实现数据共享,比如经典的**“生产者”和“消费者”**模型中,通过队列可以很便利地实现两者原创 2021-08-19 21:52:05 · 452 阅读 · 0 评论 -
Comparable与Comparator有什么区别?
一、Comparable接口Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器需求:请将两个对象之间的属性字段按照大小规则排序如: * 1.如何按照年龄大小排序呢? * 2.体重降序排列呢?? * 3.按照年龄升序排列,年龄相同的体重升原创 2021-08-19 19:05:54 · 240 阅读 · 0 评论 -
阿里Java后端面经【2021-8月份-记录牛客】
一、项目问的很细,问数据库表的设计?如果数据量太大了怎么办?(水平拆分、垂直拆分)怎么拆?垂直拆分是指数据表列的拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分拆分原则1.把不常用的字段单独放在一张表;,2.把text,blob等大字段拆分出来放在附表中3.经常组合查询的列放在一张表中优点1.拆分后业务清晰,拆分规则明确。2.系统之间整合或扩展容易。3.数据维护简单。缺点1.部分表关联无法在数据库级别完成,需要在程序中完成2. 事务处理相对更为复杂3. 切分达原创 2021-08-18 17:44:32 · 276 阅读 · 0 评论 -
2021-08-15美团后端笔试【要我真AC不了啊--债见--我去送外卖了】
第一题签到题没难度import java.util.*;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); List<String> detail = new ArrayList<>(); f.原创 2021-08-15 21:01:00 · 2110 阅读 · 1 评论 -
LeetCode146 手撕LRU算法的2种实现方法
最近最久未使用 如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。2.利用一个链表来实现,每次新插入数据的时候将新数据插到链表的头部;每次缓存命中(即数据被访问),则将数据移到链表头部;那么当链表满的时候,就将链表尾.原创 2021-08-15 15:07:19 · 207 阅读 · 0 评论 -
收集牛客网腾讯面试查漏补缺【threadlocal、explain、引用】
一、ThreadLocal【解决共享变量】1.ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。2.使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。3.ThreadLocalMap是ThreadLocal的内部静态类,而它的构成主要是用Entry来保存数据 ,而且原创 2021-08-15 14:37:08 · 129 阅读 · 0 评论 -
LeetCode225、232 【两个队列实现栈,两个栈实现队列】
一、两个队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 falseclass MyStack { private Queue<Integer> a;//输入队列原创 2021-08-14 15:03:29 · 126 阅读 · 0 评论 -
2021-08-14美团算法面试题【数组实现二分、三数和、求n进制】
一、二分查找public static int search(int[] nums, int target) { int left = 0, right = nums.length-1; while (left <= right){ int mid = (left + right)/2; if (nums[mid] > target){ right = mid - 1;原创 2021-08-14 14:37:28 · 123 阅读 · 0 评论 -
Redis6为什么又引入了多线程?单线程发生了什么?
(1)为什么 Redis 一开始选择单线程模型(单线程的好处)?(2)为什么 Redis 在 6.0 之后加入了多线程(在某些情况下,单线程出现了缺点,多线程可以解决)?一、Redis使用单线程不管是单线程或者是多线程都是为了提升Redis的开发效率,因为Redis是一个基于内存的数据库,还要处理大量的外部的网络请求,这就不可避免的要进行多次IO。好在Redis使用了很多优秀的机制来保证了它的高效率。那么为什么Redis要设计成单线程模式的呢?1.IO多路复用FD是一个文件描述符,意思是表示当前.原创 2021-08-14 10:16:15 · 271 阅读 · 0 评论 -
整理一些关于树的力扣热门算法操作
一、LC94、144、145中序,前序,后续遍历 List<Integer> front = new ArrayList<>(); List<Integer> mid = new ArrayList<>(); List<Integer> back = new ArrayList<>(); //前序遍历 public void Preorder(TreeNode root){ if(root == nu.原创 2021-08-12 21:47:52 · 130 阅读 · 0 评论 -
【个人百度一面】----Java后端开发岗位----【校招提前批】
整体来说,百度体验感很好,面试官提前打电话预约了视频面试。一、自我介绍面试官您好,我是…,现在,,略,项目简介。二、项目面试2.1 你说说你的项目各个模块之间是如何交互的吧?后台系统 springboot mybatis计算系统 spark存储系统 hadoop hdfs mysql简单说了下数据流程,后台与计算系统的交互数据。因为是单机系统,没有采用rpc通信,采用的是传统的HTTP2.2 前台有什么数据?省市疫情数据,周边疫情,最新官方消息等等2.3 你觉得有挑战的模块是什么?原创 2021-08-10 18:29:27 · 252 阅读 · 0 评论 -
2021-07/08收集字节跳动---Java提前批面试题
一、字节提前批java后台开发面试一面1. 字符编码的utf8 gbk为什么设计这么多格式。1)ASCII 编码众所周知,计算机只能处理0和1,任何符号都转换为0和1的序列才能处理。计算机中8个位(bit)作为一个字节,所以1个字节能产生2的8次方个0和1的不同组合,也就是说1个字节做多能表示256种字符。ASCII编码就是用1个字节来存储字符,计算机最初是美国人发明的,他们的符号不多,所以还将8个0和1序列中的第一位固定为0,ASCII只能表示127个字符。2)GBK 编码美国佬的符号不多,所以原创 2021-08-08 15:03:19 · 7913 阅读 · 0 评论 -
2021字节跳动秋招整理牛客网---Java后端提前批面试
一、字节提前批 java 后端一面1.1 你说你用了 RPC 远程调用,讲讲原理是怎么样的RPC(Remote Procedure Call)远程调用,通过某种手段,协议,约定调用非本地服务RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节。让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务1.2 讲一下网络间是如何通信的,具体一些,用刚才你说的 rpc 具体原创 2021-08-06 09:55:46 · 2647 阅读 · 0 评论