面试
文章平均质量分 84
面试
进朱者赤
阿里非典型程序员一枚:微信公众号同名,记录平平无奇程序员在大厂的打怪升级之路。
Java、大数据、数据结构算法
展开
-
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
方式优点缺点时间复杂度空间复杂度快慢指针简洁高效,不需要额外空间(除了指针)不适用于需要找到环的起始节点或环的长度的情况O(n)O(1)哈希表容易理解和实现,能够检测环的存在需要额外的空间来存储访问过的节点O(n)O(n)原创 2024-04-20 23:12:33 · 643 阅读 · 6 评论 -
【经典算法】LeetCode 26. 删除有序数组中的重复项:(Java/C/Python3实现含注释说明,Easy)
方式优点缺点时间复杂度空间复杂度方式一原地修改,满足题目要求代码稍微复杂一些O(n)O(1)方式二代码简洁,易理解不满足原地修改和O(1)额外空间的要求O(n)O(n)原创 2024-04-20 22:58:36 · 1032 阅读 · 3 评论 -
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
最小堆快速选择算法优点- 简单易实现- 高效,能找到第k个最大或最小元素- 适用于动态数据流- 原地操作,不需要额外空间缺点- 空间复杂度较高- 平均情况下较高时间复杂度时间复杂度- 平均:O(nlogk)- 平均:O(n)- 最差:O(nlogk)- 最差:O(n^2)空间复杂度- O(k)- 平均:O(logn)- 最差:O(n)其他- 用于处理动态数据流- 快速选择是快速排序的关键步骤。原创 2024-04-15 20:14:29 · 730 阅读 · 4 评论 -
你真是了解Java数组吗?
通过本文的介绍,读者应该对Java数组的定义、使用、底层存储原理以及与其他数据类型的转换有了更深入的了解。数组是Java中非常重要的数据结构之一,它允许我们存储相同类型的数据元素的集合,并可以通过索引来访问这些元素。需要确保数组中的对象类型是可序列化的,否则在执行序列化的过程中可能会抛出异常。数组的长度是固定的,而集合框架的长度是可变的。Java的数组是固定长度的,一旦分配了内存空间,其长度在运行时是不可改变的。通过索引可以直接访问数组中的元素。三维数组是数组的数组的数组,即每个元素都是一个二维数组。原创 2024-04-10 23:39:48 · 872 阅读 · 2 评论 -
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
通过动态规划计算回文子串算法稳定可靠需要额外的二维数组存储状态O(n^2)O(n^2),中心扩展法通过扩展中心位置计算回文子串具有较高效率对空间的使用较低O(n^2)O(1)原创 2024-04-09 18:33:09 · 1292 阅读 · 15 评论 -
【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)
方式描述优点缺点时间复杂度空间复杂度迭代模拟直接根据规则模拟整个游戏过程,依次淘汰成员直观和易理解当成员数目较大时,效率较低O(num^2)O(num)数学+迭代通过数学公式递推最终结果,逐步缩小问题规模时间效率高,不需要昂贵的删除操作需要数学知识,公式推导可能不够直观O(num)O(1)递归通过递归函数,从基础情况逐步返回最终答案代码简洁,易编写栈空间开销大,可能会栈溢出O(num)O(num)迭代改进递归方法的迭代版本,避免了栈溢出的问题。原创 2024-04-08 11:08:06 · 527 阅读 · 6 评论 -
Flink常见面试问题(附答案)
Apache Flink是一个开源的流处理和批处理框架,可以实现快速、可靠、可扩展的大数据处理。窗口是Flink中用于对无限数据流进行有界处理的机制。它将无限流切分为有限的、不重叠的块,并对每个窗口进行计算。。原创 2024-04-07 12:55:17 · 3527 阅读 · 7 评论 -
Spring常见面试题(含答案)
Spring的核心容器是指Spring容器,它负责初始化、配置和管理Bean对象。Spring容器有两种类型:BeanFactory和ApplicationContext。BeanFactory是基础容器接口,提供了基本的Bean管理功能;ApplicationContext是BeanFactory的子接口,增加了更多的高级功能,如国际化处理、事件发布等。Spring的声明式事务是通过AOP实现的,它允许开发者通过配置方式来定义事务的边界。原创 2019-08-19 11:30:18 · 18 阅读 · 1 评论 -
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
递归法迭代+原地反转方法思路将链表划分为大小为k的子链表,递归处理使用循环迭代遍历链表,并在每次迭代中原地反转子链表时间复杂度O(n),每个节点被遍历一次O(n),每个节点被遍历一次空间复杂度O(n/k),递归调用栈的深度O(1),原地修改链表(如果递归栈的深度达到n/k,则创建了O(n/k)个递归调用栈帧)(不需要额外的空间,仅使用常数级别的指针变量和变量存储空间)优点实现简单,逻辑清晰不需要额外的递归调用栈,适用于大规模链表代码可读性好原地修改链表,不需要额外空间。原创 2024-04-07 09:03:34 · 507 阅读 · 0 评论 -
【经典算法】LeetCode350:两个数组的交集 II(Java/C/Python3/JavaScript实现含注释说明,Easy)
哈希表法排序和双指针法时间复杂度O(n + m) (n 和 m 分别为两个数组的长度)O(nlogn + mlogm)(n 和 m 分别为两个数组的长度)空间复杂度O(min(n, m)) (n 和 m 分别为两个数组的长度)O(min(m,n)) (C语言版本为O(1),不包括存储结果的数组,则为)提前排序不需要需要额外空间需要不需要适用场景未排序的数组已排序的数组优点- 不需要提前排序数组;- 适用于大多数情况下的数组交集问题- 不需要额外的空间用于存储哈希表;原创 2024-04-04 10:59:02 · 1023 阅读 · 4 评论 -
动态规划详解(Dynamic Programming)
动态规划的核心思想是将问题分解为一系列子问题,并通过记忆化或递推的方式求解子问题,从而得到原始问题的解。原创 2024-04-03 08:54:35 · 1791 阅读 · 2 评论 -
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
对比点递归法栈解法思路直观性直观相对复杂递归深度问题可能存在递归深度过大导致栈溢出的风险无递归深度限制利用系统调用栈是否时间复杂度O(n)O(n)空间复杂度O(n)O(n)实现复杂性相对简单相对复杂额外空间需求无有。原创 2024-04-02 07:57:01 · 726 阅读 · 0 评论 -
Mysql数据库知识点
use test;create database 数据库名;alter database 数据库名;drop database 数据库名;create table 表名(列名 数据类型 数据约束,列名 数据类型 数据约束age int(4)alter table 表名;1)在表中增加新字段2)删除表中的字段3)修改表中字段的类型drop table 表名;原创 2019-04-20 19:51:12 · 813 阅读 · 1 评论 -
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
递归和迭代都可以用来解决将两个有序链表合并的问题。递归解法迭代解法优点简洁,易于理解和实现不涉及函数递归调用,避免递归开销和栈溢出问题缺点可能产生多个函数调用,涉及函数调用开销和栈溢出问题需要使用额外变量保存当前节点,增加代码复杂性时间复杂度O(m+n),其中m和n分别是两个链表的长度O(m+n),其中m和n分别是两个链表的长度空间复杂度O(m+n),其中m和n分别是两个链表的长度O(1)在实际应用中,如果链表较长,特别是超过系统栈的容量,采用迭代解法更为安全。原创 2024-04-01 09:00:40 · 1336 阅读 · 0 评论 -
【经典算法】LeetCode1:两数之和(Java/C/Python3实现含注释说明,Easy)
两数之和的三种解法思路,以及java和c和python的解法很详细,原创 2024-03-31 12:09:16 · 643 阅读 · 0 评论 -
【经典算法】LeetCode14:最长公共前缀(Java/C/Python3实现含注释说明,Easy)
最长公共前缀(LeetCode 14,Easy)的4种经典解法:横向扫描,纵向扫描,分治法,二分法,以及java,C,python的3种语言的实现原创 2024-03-31 11:18:49 · 1231 阅读 · 0 评论 -
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)
常见的数据结构与算法题目,涵盖了数组、链表、栈、队列、二叉树、哈希表、字符串、图、排序和查找等方面的考察点。每个题目都附带有LeetCode的链接,可以点击链接了解更多题目详情。原创 2024-03-29 17:29:56 · 272 阅读 · 0 评论 -
【经典算法】LeetCode 1143:最长公共子序列Java/C/Python3实现含注释说明,Medium)
解法时间复杂度空间复杂度备注动态规划O(m * n)O(m * n)使用二维数组保存中间计算结果递归优化O(m * n)O(m * n)使用二维数组保存中间计算结果。原创 2024-03-28 17:47:11 · 536 阅读 · 0 评论 -
JAVA后端开发面试题库
● 1. 进程的有哪几种状态,状态转换图,及导致转换的事件。● 2. 进程与线程的区别。● 3. 进程通信的几种方式。● 4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)● 5. 线程的实现方式. (也就是用户线程与内核线程的区别)● 6. 用户态和核心态的区别。● 7. 用户栈和内核栈的区别。● 8. 内存池、进程池、线程池。(c++程序员必须掌握)● 9. 死锁的概念,导致死锁的原因.● 10. 导致死锁的四个必要条件。原创 2024-03-26 20:48:19 · 1218 阅读 · 0 评论 -
Java知识体系
Java知识体系:原创 2020-01-03 10:01:31 · 73 阅读 · 0 评论 -
【职场】关于跳槽涨薪30%?
或许你有没有觉察到,最近身边的某些同事开始变得“神秘”:反复点击一个页面,再迅速关掉,没过多久,又忍不住点开。伴随消息提示的内容,他们的面部表情也在兴奋与失落间反复横跳。等到自己经历之后,你或许会恍然大悟:每年到这个时候,身边有多少同事,都正在密谋跳槽。012020到2021从“求稳”到“涨薪”回看2020或许不难发现,职场人对于跳槽的心态正在悄然发现变化。《2021人才资本趋势报告》显示,2020年中国职场人跳槽规模同比下降了31.5%。..原创 2022-04-22 08:50:46 · 2437 阅读 · 0 评论 -
Java开发技术知识图谱
源文件下载:原创 2022-04-21 12:59:48 · 1565 阅读 · 2 评论 -
面试神器:java进阶手册
JAVA面试学习资料/进阶学习《JAVA进阶手册》,压轴技能全攻略,面试高手带你嗨翻天。原创 2021-12-17 00:02:36 · 932 阅读 · 1 评论 -
HashMap的时间复杂度分析(JDK8)
虽然HashMap的理论时间复杂度是 O(1),但在实际应用中,你需要考虑到多种因素,以确保它的高效运行。通过遵循最佳实践和深入了解HashMap的内部机制,你可以充分利用这一强大的数据结构,以实现高性能的应用程序。原创 2019-12-17 14:46:36 · 8335 阅读 · 1 评论 -
Java 内存模型& JVM 内存结构
这两个概念估计有不少人会混淆,它们都可以说是 JVM 规范的一部分,但真不是一回事!它们描述和解决的是不同问题,简单来说,Java 内存模型,描述的是多线程允许的行为 JVM 内存结构,描述的是线程运行所设计的内存空间JVM 是什么呢?它屏蔽了底层架构的差异性,是 Java 跨平台的依据,也是每个 Java 程序员必须了解的一部分。JVM 体系结构Java Virtual Mach...原创 2019-10-22 16:45:36 · 151 阅读 · 1 评论 -
TCP三次握手和四次挥手的全过程
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。原创 2019-04-17 09:33:14 · 517 阅读 · 2 评论 -
Kafka面试题参考
1.Kafka的设计是什么样的呢?Kafka将消息以topic为单位进行归纳将向Kafka topic发布消息的程序成为producers.将预订topics并消费消息的程序成为consumer.Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.producers通过网络将消息发送到Kafka集群,集群向消费者提供消息2.数据传输的事物定义有哪三种?...转载 2019-08-13 11:38:37 · 180 阅读 · 0 评论 -
ping和ICMP协议
ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。 ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序列号从...转载 2019-08-15 09:41:25 · 1122 阅读 · 0 评论 -
常见垃圾收集算法(4种)
几种常见的垃圾收集算法的核心思想。 1.Mark-Sweep(标记-清除)算法 这是最基础的垃圾回收算法,之所以说它是最基础的是因为它最容易实现,思想也是最简单的。标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。具体过程如下图所示: 从图中可以很容易看出标记-清除算法实现起来比较容易,但是有...原创 2019-08-20 22:26:59 · 4426 阅读 · 1 评论 -
JVM内存结构
jvm内存结构:《Java虚拟机原理图解》3、JVM运行时数据区程序计数器:1,是执行的字节码的行号指示器,记录的是正在执行的虚拟机字节码指令的地址。2,每个线程都有独立计数器,互不干扰。3,唯一不会发生内存泄漏的一块区域。Java虚拟机栈:1,这是我们通常所说的“堆和栈”中存放局部变量的栈(和存放对象的堆),但是却不仅仅存放局部变量,存放局部变量的只是里面的变...转载 2019-08-19 20:50:27 · 94 阅读 · 0 评论 -
线程的五种状态
线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 创建状态(New 状态): 生成线程对象,并没有调用该对象的start方法 就绪状态:(可运行状态) 2.1、调用了线程对象的start方法之后,即进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。 2.2、在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。 运行状态:...原创 2019-08-19 17:53:02 · 1201 阅读 · 0 评论 -
为什么要禁止除GET和POST之外的HTTP方法?
根据HTTP标准,HTTP请求可以使用多种方法,其功能描述如下所示。HTTP1.0定义了三种请求方法: GET、POST、HEADHTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT。原创 2019-08-19 16:09:53 · 1220 阅读 · 1 评论 -
Object类默认的方法
registerNatives() //私有方法 getClass() //返回此 Object 的运行类。 hashCode() //用于获取对象的哈希值。 equals(Object obj) //用于确认两个对象是否“相同”。 clone() //创建并返回此对象的一个副本。 toString() //返回该对象的字符串表示。 notif...原创 2019-08-09 15:58:51 · 312 阅读 · 0 评论 -
TCP报文
最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。原创 2019-08-27 16:47:55 · 975 阅读 · 1 评论 -
一次完整的http请求过程
在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的http请求过程)。整个流程如下:域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议、ARP协议和OSPF协议。 发起TCP的3次握手 建立TCP连接后发起http请求 服务器响应http请求 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) 断开TCP连接...原创 2019-08-27 17:50:09 · 416 阅读 · 0 评论 -
互联网大厂面经分享
互联网大厂面经分享(牛客网)传送门:https://www.nowcoder.com/interview/center原创 2019-09-29 11:05:11 · 662 阅读 · 0 评论 -
Java中Char占用几个字节???
也许你看到的一些书上说Char占用2个字节,但事实真的的是这样吗?非也:与编码格式、中英文均有关系uft8编码下占3个字节;GBK编码下占2个字节;但是如果 char表示英文字母:在uft8编码下占一个字节;在GBK编码下还是占2个字节;所以GBK编码下:char类型的值不管是英文还是中文都是统一2个字节!...原创 2019-09-16 10:58:38 · 2086 阅读 · 0 评论 -
Bean的作用范围的配置(重点)
Bean的作用范围的配置scope属性 :Bean的作用范围singleton :默认的,Spring会采用单例模式创建这个对象。 prototype :多例模式。(Struts2和Spring整合一定会用到) request :web项目中,Spring创建这个类以后,将这个类存入到request范围中。 sessio...原创 2019-09-26 21:54:47 · 258 阅读 · 0 评论 -
【HashMap】深入理解HashMap+ConcurrentHashMap的扩容策略
理解HashMap和ConcurrentHashMap的重点在于: (1)理解HashMap的数据结构的设计和实现思路 (2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路 前面的文章已经介绍过Map结构的底层实现,这里我们重点放在其扩容方法, 这里分别对JDK7和JDK8版本的HashMap+ConcurrentHashMap来分析: 这个版本的HashMap数据结构还是数组+链表的方式,扩容方法如下: 上面的这段代码不并不难理解,对于扩原创 2019-09-01 23:43:23 · 343 阅读 · 1 评论 -
MyBatis的介绍以及工作流程原理
MyBatis是一个Java持久化框架,它通过使用简单的XML或注解来简化关系型数据库的访问。它提供了灵活的SQL映射和数据库操作的功能,使得开发人员可以更轻松地处理数据库交互。MyBatis与其他ORM框架的主要区别在于,它采用了更为传统的数据库访问方式,即SQL层与持久层之间存在明确的分离。这使得开发人员对SQL有更大的控制权,可以编写高效、灵活的SQL语句来操作数据库。原创 2019-09-01 23:27:46 · 214 阅读 · 1 评论