![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试准备
小菜菜1223
qq846792646
展开
-
Linked List
链表相关算法题原创 2023-03-29 16:51:02 · 569 阅读 · 1 评论 -
面试准备(九)MySql索引
什么是索引:索引是帮助MySql高效获取数据的排好序的数据结构二叉树:如果是顺序存储,大的数据一直会往右侧插入。红黑树(二叉平衡树)如果数据量过大,树层级过大B树每次IO都会取出好几个节点进行查找B+树所有元素都在叶子节点,中间的冗余索引都是叶子节点最大的元素叶子节点大小从左往右依次递增。双向指针存储的两边地址,方便范围查询MySql索引默认存储到data目录下,一个库对应一个文件夹。MyISAM存储引擎(非聚集索引)会有三...原创 2021-07-09 16:27:06 · 81 阅读 · 0 评论 -
面试准备(二十)java HashMap
为什么用红黑树解决链表过长,查询效率过低的问题为什么不直接使用红黑树红黑树插入会很慢,要维护自己的结构为什么使用红黑树的阈值是8之所以是8,是因为Java的源码贡献者在进行大量实验发现,hash碰撞发生8次的概率已经降低到了0.00000006,几乎为不可能事件,如果真的碰撞发生了8次,那么这个时候说明由于元素本身和hash函数的原因,此次操作的hash碰撞的可能性非常大了,后序可能还会继续发生hash碰撞。所以,这个时候,就应该将链表转换为红黑树了,也就是为什么链表转红黑树的阈值是8。原创 2021-07-09 14:35:59 · 71 阅读 · 0 评论 -
面试准备(十九)java常见
一、什么是面向对象?谈谈你对面向对象的理解面向过程:注重事情的每一个步骤及顺序。面向过程比较高效。面向对象:注重事情有哪些参与者(对象)、各自需要做什么。更易于复用、扩展、维护。面向对象的特性包括:封装、继承、多态。封装:明确标识出允许外部使用的所有成员函数和数据项。内部细节对外部调用透明,外部调用无需修改或者关心内部实现。继承:继承基类的方法,并做出自己的改变和扩展。多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。二、JDK、JRE、JVM三者的区别和联原创 2021-07-09 10:33:02 · 67 阅读 · 0 评论 -
面试准备(十八)三角形的最大周长
贪心算法:数组先排序,排序之后以最后三个数为基准,看是否满足a+b>c,不满足则把最大值由c改成b,再从a前边找个d,看a+d是否大于c。代码:import java.util.Arrays;public class Triangles { public static void main(String[] args) { System.out.println(largestPerimeter(new int[]{3,6,2,3})); } ...原创 2021-07-06 14:40:20 · 69 阅读 · 0 评论 -
面试准备(十七)柠檬水找零
贪心算法:局部最优解不影响全局解代码:public class lemonChange { public static void main(String[] args) { System.out.println(change(new int[]{5,5,20})); } public static boolean change(int[] bills){ int five = 0,ten=0; for(int bill:..原创 2021-07-06 14:31:51 · 61 阅读 · 0 评论 -
面试准备(十六)二叉树 深度优先 广度优先
深度优先:递归,从子节点往上计算深度,计算到根节点取最小值广度优先:从根节点往下找,找到叶子结点为止代码:import java.util.LinkedList;import java.util.Queue;public class TreeDeep { static class TreeNode{ int val; TreeNode left; TreeNode right; int deep; ...原创 2021-07-06 14:10:47 · 88 阅读 · 0 评论 -
面试准备(十四)排列硬币
解题思路:迭代:循环计算和大于n之后输出二分法:牛顿迭代:代码:public class ArrangeCoin { public static void main(String[] args) { System.out.println(arrangeCoins(10)); System.out.println(arrangeCoins2(10)); System.out.println(arrangeCoins3(10))...原创 2021-07-05 17:56:08 · 86 阅读 · 0 评论 -
面试准备(十五)求两数之和
解题思路:暴力解法:双重for循环map标记法:循环一次即可,每个数据进入map进行标记,寻找target-x在不在即可代码:import java.util.Arrays;import java.util.HashMap;import java.util.Map;public class TwoSum { public static void main(String[] args) { System.out.println(Arrays.toStr...原创 2021-07-05 16:50:45 · 55 阅读 · 0 评论 -
面试准备(十三)三个数的最大乘积
考虑数组中的正负数。解题思路:排序:排序之后取值比较线性扫描:循环一遍计算比较复杂度以及具体逻辑看代码:import java.util.Arrays;public class MaxProduct { public static void main(String[] args) { System.out.println(); } //排序后输出最大值 Nlog(n) public static int sort(int[] ...原创 2021-07-05 16:36:26 · 90 阅读 · 0 评论 -
面试准备(十二)寻找数组中心下标
解题思路:双指针算法,循环数组,total(初始为0)从当前元素累加,sum(数组之和)如果不等于total,减去当前元素,继续循环。代码:import java.util.Arrays;public class ArrayCenterIndex { public static void main(String[] args) { System.out.println(pivotIndex(new int[]{1,7,3,6,5,6})); } ...原创 2021-07-05 15:23:17 · 63 阅读 · 0 评论 -
面试准备(十一)删除排序数组
不能使用set。解题思路:前提是:有序数组定义一个快指针j,定义一个慢指针i。开启循环,i,j一起往后循环,当发现i与j相等之后,i停止循环,j继续循环,直到j与i不相等之后,将i+1赋值为j,继续循环,最后返回i的值即可。代码:public class SortedArrayDuplicates { public static void main(String[] args) { System.out.println(removeDuplicates(n...原创 2021-07-05 15:12:51 · 65 阅读 · 0 评论 -
面试准备(十)素数个数统计
解题思路一:暴力解法:每个数n都计算与n-1之内的数能否整除(后期可以优化到与2-根号n之间)。解题思路二:埃筛法:利用合数的概念,素数*n必然是合数,因此可以从2开始遍历,将所有合数提前做上标记,减少计算。代码:public class PrimeNumber { public static void main(String[] args) { System.out.println(bf(100)); System.out.printl...原创 2021-07-05 14:44:40 · 72 阅读 · 0 评论 -
面试准备(八)链表反转
解题思路一:链表指向的都是下一个元素的指针,如果想链表反转,需要使用一个变量保存一下下一个元素的指针。每一次处理结果作为下一次处理的初始值。解题思路二:递归思想大问题拆成小问题,必须从最后一个元素开始才能保证链表不断。代码:public class ReverseList { //内部链表类 static class ListNode{ int val; ListNode next; p...原创 2021-07-05 11:29:26 · 105 阅读 · 0 评论 -
面试准备(七)Redis、Redis的分布式锁、Redis的双写问题、Reids击穿、穿透、雪崩
一、什么是Redis Redis是一个使用C语言编写的,开源的高性能非关系型(NoSQL)的键值对数据库。Redis的数据是存在内存中的,所以读写速度很快。常用于缓存方向,每秒可处理超过10W次读写操作,可以用来做分布式锁。此外,Redis支持事务、持久化等等。 优势:二、Reids的分布式锁举例:比如电商中的超卖问题,同时调用同一个接口,减少库存数量出现错误。解决方法:1、增加锁问题:分布式集群环境中通过分发之后jvm进程级别的锁并不管用。2、redis分布式锁...原创 2021-07-02 00:14:59 · 203 阅读 · 1 评论 -
面试准备(六) Kafka
一、Kafka概述 Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,常见用于web/nginx日志、访问日志,消息服务等。 Kafka的设计目标如下: 1、以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保持常数时间的访问性能。 2、高吞吐率。即使在非常廉价的商用机器上也能做到单机支持没鸟100000条消息的传输。 3、支持Kafka Server间的消费分区以及分布式消费,同时能保证每个par...原创 2021-07-01 15:36:58 · 217 阅读 · 0 评论 -
面试准备(五) java类的初始化和实例化
首先要了解java中类的加载机制:类的加载机制网上有各种各样的讲解文章,其实通俗的概括就是首先程序运行就会启动java虚拟机JVM。1)Loading(载入)JVM 在该阶段的主要目的是将字节码从不同的数据源(可能是 class 文件、也可能是 jar 包,甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的java.lang.Class对象。2)Verification(验证)JVM 会在该阶段对二进制字节流进行校验,只有符合 JVM 字节码规范的才能被 JVM...原创 2021-06-17 16:15:36 · 139 阅读 · 1 评论 -
java Flink(三十) 面试问题合集
https://blog.csdn.net/wypblog/article/details/103900577https://zhuanlan.zhihu.com/p/138101642原创 2021-05-24 10:59:39 · 129 阅读 · 0 评论 -
面试准备(四)位运算以及代码中简单使用
位运算:从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。合理的运用位运算更能显著提高代码在机器上的执行效率。一、& 与运算两位同时为1,结果才为1,否则结果为0。0&0=0 0&1=0 1&0=0 1&1=1应用技巧:1、清零:如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。2原创 2021-05-17 18:03:36 · 85 阅读 · 0 评论 -
面试准备(三)原码、补码、反码以及进制转换
原码、补码、反码:首先:计算机中的所有数据都是以数据补码的形式存储的(机器码)。计算机中没有减法计算器,所以引入反码、补码具有减法计算的意义。原码:原码就是最高位表示符号位,0为正数,1为负数。其余是数值。 ps:原码在正数计算上没有问题,但是在正数负数相加、负数负数相加上会有错误。原码最大的问题就是一个数加上他的相反数不等于0,所以引入反码。反码:正数的反码还是等于原码,负数的反码就是他的原码除符号位外,按位取反。ps:反码的存在解决了两个相反数相加不等于0 的问题,但是在两个负数相加还是存在原创 2021-05-17 17:37:24 · 156 阅读 · 0 评论 -
面试准备(二)java 内存模型JMM 、内存通信等
一、简述JMM Java的内存模型JMM用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。JMM规范了Java虚拟机与计算机内存之间是如何协同工作的,规定了一个线程如何以及何时可以看到由其他线程修改后的共享变量的值,以及如何同步的访问共享变量。二、简述JMM模型下的线程间的通信 如果线程A与线程B之间要通信 步骤:1、线程A把本地内存A中更新过的共享变量刷新的主内存中去。 2、...原创 2021-04-01 20:48:10 · 79 阅读 · 0 评论 -
面试准备(一) java的垃圾回收机制GC概述以及回收算法
一、描述一下GC以及GC回收的算法1、Java GC采用了分代的思想,将java的堆内存分成新生代、年老代以及永久代。2、GC的主要算法:标记-清除、标记-压缩、复制算法3、什么是新生代: 新生代主要存储创建时间比较新的对象。新生代会被分为三个部分eden区、from区、to区。当我们创建对象时,jvm分配内存时,会在新生代的eden区寻找合适的内存区域。当eden内存不够时,会触发minor GC操作,它会把eden中存活的对象和from区的存活对象复制到to区。当to区的年龄超...原创 2021-04-01 20:26:08 · 142 阅读 · 0 评论