面试
技术砖家--Felix
I'm felix li
展开
-
为什么MySQL数据库索引选择使用B+树?
为什么MySQL数据库索引选择使用B+树?在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!学过数据结构的一般对最基础的树都有所认识,因此我们就从与我们主题更为相近的二叉查找树开始。一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:1、任意节点左子树不为空,则左子树的值均小翻译 2021-10-12 15:42:45 · 620 阅读 · 0 评论 -
HashMap为什么选择红黑树?
为什么不选择AVL树?RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢?红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的原创 2021-10-12 15:20:15 · 3303 阅读 · 0 评论 -
笔试算法《矩阵相乘》
描述如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的矩阵的大小不超过100*100输入描述:输入包含多组数据,每组数据包含:第一行包含一个正整数x,代表第一个矩阵的行数第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数第三行包含一个正整数z,代表第二个矩阵的列数之后x行,每行y个整数,代表第一个矩阵的值之后y行,每行z个整数,代表第二个矩阵的值输出描述:对于每组输入数据,输出x行,每行z个原创 2021-10-12 14:47:20 · 216 阅读 · 0 评论 -
Spring AOP和IOC的深刻理解(简单易懂)
IOC(控制反转)Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系所谓控制反转,到底是如何控制的呢?谁控制谁?控制什么?传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取原创 2021-09-17 15:08:17 · 266 阅读 · 0 评论 -
笔试算法《打印零与奇偶数》
假设有这么一个类:class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } // 构造函数 public void zero(printNumber) { ... } // 仅打印出 0 public void even(printNumber) { ... } // 仅打印出 偶数 public void odd(printNumber) { ... } // 仅打印出 奇数}相同的一个 ZeroEvenOdd 类原创 2021-09-15 15:52:32 · 103 阅读 · 0 评论 -
笔试算法《交替打印FooBar》
交替打印FooBar我们提供一个类:class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("bar"); } }}两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo(原创 2021-09-15 15:50:03 · 170 阅读 · 1 评论 -
NIO和BIO的对比和理解
BIO同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会.原创 2021-09-13 13:40:43 · 352 阅读 · 0 评论 -
笔试算法《24点游戏》
描述问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利输入:4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。输出:true or false本题含有多组样例输入。输入描述:输入4个int整数输出描述:返回能否得到24点,能输出true,不能输出false示例1输入:7 2 1 10输出:true代码public class Huawei24点游戏算法 { public static void main(St原创 2021-09-13 10:27:16 · 298 阅读 · 0 评论 -
笔试算法《配置文件恢复》
描述有6条配置命令,它们执行的结果分别是:命 令 执 行reset reset whatreset board board faultboard add where to addboard delete no board at allreboot backplane impossiblebackplane abort install firsthe he unknown command注意:he he不是命令。为了简化输入,方便用户,以“最短唯一匹配原则”匹配:1、若只输入一原创 2021-09-09 10:53:54 · 74 阅读 · 0 评论 -
笔试算法《最长公共子串》
描述查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!本题含有多组输入数据!输入描述:输入两个字符串输出描述:返回重复出现的字符示例1输入:abcdefghijklmnopabcsafjklmnopqrstuvw输出:jklmnop代码public class Huawei最长公共子串 { public static void main(Stri原创 2021-09-08 10:33:24 · 110 阅读 · 0 评论 -
笔试算法《Mp3光标位置移动》
题目MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。其他情况下用户按Up键,光标挪到上一首歌曲;用户按Down键,光标挪到下一首歌曲。歌曲总原创 2021-08-20 11:49:11 · 79 阅读 · 0 评论 -
笔试算法《DNA序列》
描述一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。给定一个很长的DNA序列,以及限定的子串长度N,请帮助研究人员在给出的DNA序列中从左往右找出GC-Ratio最高且长度为N的第一个子串。DNA序列为ACGT的子串有:ACG,CG,CGT等等,但是没有AGT,CT等等输入描述:输入一个string型基因序列原创 2021-08-18 11:42:21 · 556 阅读 · 0 评论 -
笔试算法《放苹果》
描述题目描述把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。数据范围:0<=m<=10,1<=n<=10。本题含有多组样例输入。输入描述:输入两个int整数输出描述:输出结果,int型示例1输入:7 3输出:8代码public class Huawei放苹果 { public static void main(String[] args) throws Exc原创 2021-08-05 11:57:39 · 110 阅读 · 0 评论 -
笔试算法《查找组成一个偶数最接近的两个素数》
描述任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。本题含有多组样例输入。输入描述:输入一个偶数输出描述:输出两个素数示例1输入:20输出:713代码public class Huawei查找组成一个偶数最接近的两个素数 { public static void main(String[] args) throws Exception{ BufferedReader br原创 2021-08-04 15:05:57 · 66 阅读 · 0 评论 -
笔试算法《找出字符串中第一个只出现一次的字符》
描述找出字符串中第一个只出现一次的字符输入描述:输入几个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1输入:asdfasdfoaabb输出:o-1代码public class Huawei找出字符串中第一个只出现一次的字符 { public static void main(String[] args) throws IOException { my(); niuke(); } public原创 2021-08-02 14:36:26 · 76 阅读 · 0 评论 -
笔试算法《输入n个整数,输出其中最小的k个》
描述输入n个整数,输出其中最小的k个。本题有多组输入样例,请使用循环读入,比如while(cin>>)等方式处理输入描述:第一行输入两个整数n和k第二行输入一个整数数组输出描述:输出一个从小到大排序的整数数组示例1输入:5 21 3 5 7 2输出:1 2代码public class Huawei输入n个数输出最小的k个 { public static void main(String[] args) throws IOException {原创 2021-07-30 10:01:41 · 501 阅读 · 0 评论 -
笔试算法《高精度整数运算》
描述输入两个用字符串表示的整数,求它们所表示的数之和。字符串的长度不超过10000。本题含有多组样例输入。输入描述:输入两个字符串。保证字符串只含有’0’~'9’字符输出描述:输出求和后的结果示例1输入:98765432101234567890输出:11111111100代码public class Huawei高精度整数加法 { public static void main(String[] args) throws IOException { B原创 2021-07-29 14:29:27 · 98 阅读 · 0 评论 -
笔试算法《奇偶零交替打印》
题目假设有这么一个类:class ZeroEvenOdd {public ZeroEvenOdd(int n) { ... } // 构造函数public void zero(printNumber) { ... } // 仅打印出 0public void even(printNumber) { ... } // 仅打印出 偶数public void odd(printNumber) { ... } // 仅打印出 奇数}相同的一个ZeroEvenOdd类实例将会传递给三原创 2021-07-22 14:18:09 · 94 阅读 · 0 评论 -
笔试算法《完全 数计算》
描述完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。s输入n,请输出n以内(含n)完全数的个数。计算范围, 0 < n <= 500000本题输入含有多组样例。输入描述:输入一个数字n输出描述:输出不超过n的完全数的个数示例1输入:10007100输出:原创 2021-07-16 10:38:47 · 113 阅读 · 0 评论 -
笔试算法《挑7》
描述输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37…70,71,72,73…)的个数(一组测试用例里可能有多组数据,请注意处理)输入描述:一个正整数N。(N不大于30000)输出描述:不大于N的与7有关的数字个数,例如输入20,与7有关的数字包括7,14,17.示例1输入:2010输出:31代码public class Huawei挑7 { public static void main(String[] args) throws IOExcep原创 2021-07-15 11:10:36 · 365 阅读 · 2 评论 -
笔试算法《杨辉三角的变形》
描述以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。输入n(n <= 1000000000)本题有多组输入数据,输入到文件末尾,请使用while(cin>>)等方式读入输入描述:输入一个int整数输出描述:输出返回的int值示例1输入:42输出:3-1代码publi原创 2021-07-13 16:14:07 · 94 阅读 · 1 评论 -
笔试算法《字符串距离》
描述Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。Ex:字符串A:abcdefg字符串B: abcdef通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。要求:给定任意两个字符串,写出一个原创 2021-07-11 12:17:12 · 90 阅读 · 1 评论 -
笔试算法《输出单向链表中倒数第k个结点》
描述输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};正常返回倒数第k个结点指针,异常返回空指针本题有多组样例输入。输入描述:输入说明1 输入链表结点个数2 输入链表的值3 输入k的值输出描述:输出一个整数示例1输入:81 2 3 4 5 6 7 84输出:5代码public class Hua原创 2021-07-06 16:31:50 · 347 阅读 · 4 评论 -
ThreadLocal 无法解决共享对象和ThreadLocalMap弱引用问题
ThreadLocal 无法解决共享对象的更新问题ThreadLocal 对象建议使用 static修饰。这个变量是针对一个线程内所有操作共享的,所以设置为静态变量,所有此类实例共享 此静态变量 ,也就是说在类第一次被使用时装载,只分配一块存储空间,所有此类的对象(只 要是这个线程内定义的)都可以操控这个变量。关于ThreadLocalMap<ThreadLocal, Object>弱引用问题:当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocal原创 2021-07-01 19:31:43 · 915 阅读 · 0 评论 -
笔试算法《多线程》
题目问题描述:有4个线程和1个公共的字符数组。线程1的功能就是向数组输出A,线程2的功能就是向字符输出B,线程3的功能就是向数组输出C,线程4的功能就是向数组输出D。要求按顺序向数组赋值ABCDABCDABCD,ABCD的个数由线程函数1的参数指定。[注:C语言选手可使用WINDOWS SDK库函数]接口说明:void init(); //初始化函数void Release(); //资源释放函数unsignedint__stdcall ThreadFun1(PVOID pM) ; //线原创 2021-06-30 23:32:01 · 220 阅读 · 2 评论 -
如何设计秒杀系统?
如何设计秒杀系统?转载 2021-06-24 15:35:19 · 73 阅读 · 0 评论 -
笔试算法《从单项链表中删除指定节点》
描述输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表的值不能重复。构造过程,例如输入一行数据为:6 2 1 2 3 2 5 1 4 5 7 2 2则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:1 2 表示为2->1链表为2->13 2表示为2->3链表为2->3->15 1表示为1->5链表为2->3原创 2021-06-24 15:28:19 · 126 阅读 · 0 评论 -
cookie和session的详解与区别
cookie和session的详解与区别转载 2021-06-23 19:44:39 · 76 阅读 · 0 评论 -
笔试算法《名字的漂亮度》
描述给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。给出多个名字,计算每个名字最大可能的“漂亮度”。本题含有多组数据。输入描述:整数N,后续N个名字输出描述:每个名称可能的最大漂亮程度示例1输入:2zhangsanlisi输出:192101代码public class Huawei漂亮的名字 { /**原创 2021-06-23 14:44:11 · 172 阅读 · 0 评论 -
笔试算法《Sudoku》
描述问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个3X3粗线宫内的数字均含1-9,并且不重复。例如:输入输出输入描述:包含已知数字的9X9盘面数组[空缺位以数字0表示]输出描述:完整的9X9盘面数组示例1输入:0 9 2 4 8 1 7 6 34 1 3 7 6 2 9 8 58 6 7 3 5 9 4 1 26 2 4 1 9 5 3 7 87 5 9 8 4 3 1原创 2021-06-21 09:42:51 · 136 阅读 · 0 评论 -
Mysql事务实现的原理
事务的持久性(redo log)redo log的作用是解决下面的问题:InnoDB作为MySQL的存储引擎,数据是存放在磁盘中的,但如果每次读写数据都需要磁盘IO,效率会很低。为此,InnoDB提供了缓存(Buffer Pool),作为访问数据库的缓冲:当从数据库读取数据时,会首先从Buffer Pool中读取,如果Buffer Pool中没有,则从磁盘读取后放入Buffer Pool;当向数据库写入数据时,会首先写入Buffer Pool,Buffer Pool中修改的数据会定期刷新到磁盘中,Bu.原创 2021-06-18 17:39:13 · 183 阅读 · 0 评论 -
笔试算法《迷宫问题》
描述定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。入口点为[0,0],既第一格是可以走的路。本题含有多组数据。输入描原创 2021-06-11 11:00:12 · 333 阅读 · 1 评论 -
笔试算法《学英语》
描述Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:如22:twenty two,123:one hundred and twenty three。说明:数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;输出格式为twenty two;非法数据请返回“error”;关键字提示:and,billion,million,thousand,hundred。本题含有多组输入数据。输入描述:输入一个long型整数输出描述:输出相应的英文写法示例1输入:23原创 2021-06-11 09:40:51 · 133 阅读 · 2 评论 -
《各种迷宫问题(dfs/bfs)》
各种经典迷宫问题(java实现)转载 2021-06-10 11:05:02 · 105 阅读 · 0 评论 -
关于集合list,map,set的几个问题解答!
1.list和set、map区别是什么,他们分别使用在什么场合?底层: linkedList的底层结构实现是利用对象Node,包含pre(上一个节点),next(下一个节点)和item(存储数据内容)实现,是一个双向链表;Linkedlist的删除和插入要比ArrayList快,只需要移动指针即可。ArrayList和LinkedList底层实现的区别 private static class Node<E> { E item; Node<原创 2021-06-10 09:47:04 · 172 阅读 · 0 评论 -
笔试算法《称砝码》
描述现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量(放在同一侧),问能称出多少种不同的重量。注:称重重量包括0输入描述:输入包含多组测试数据。对于每组测试数据:第一行:n — 砝码数(范围[1,10])第二行:m1 m2 m3 … mn — 每个砝码的重量(范围[1,2000])第三行:x1 x2 x3 … xn — 每个砝码的数量(范围[1,6])输出描述:利用给定的砝码可以称出的不同的重量数示原创 2021-06-10 09:20:36 · 748 阅读 · 0 评论 -
笔试算法《统计字符》
描述输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数。本题包含多组输入。输入描述:输入一行字符串,可以有空格输出描述:统计其中英文字符,空格字符,数字字符,其他字符的个数示例1输入:1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\/;p0-=\][输出:2631012代码public class Huawei统计字符 { public static void main(String[] args) throws IOE原创 2021-06-09 09:45:47 · 120 阅读 · 0 评论 -
关于Java线程池的几个问题?
1. 线程池相关核心线程满了线程放哪里?阻塞队列满了放哪里?基本线程和阻塞队列都满了放哪里?核心参数:int corePoolSize, // 线程池长期维持的线程数,即使线程处于Idle状态,也不会回收。 intmaximumPoolSize, // 线程数的上限 long keepAliveTime, TimeUnit unit, //超过corePoolSize的线程的idle时长,超过这个时间,多余的线程会被回收。 BlockingQueueworkQueue, // 任务的排队队原创 2021-06-09 09:35:58 · 468 阅读 · 3 评论 -
笔试算法《判断两个ip是否属于同一子网》
描述子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。示例:I P 地址 192.168.0.1子网掩码 255.255.255.0转化为二进制进行运算:I P 地址 11000000.10101000.00000000.00000001原创 2021-06-09 09:32:50 · 1783 阅读 · 0 评论 -
笔试算法《求小球落地5次后的经历的路程和第五次反弹高度》
描述假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?最后的误差判断是小数点6位输入描述:输入起始高度,int型输出描述:分别输出第5次落地时,共经过多少米第5次反弹多高示例1输入:1输出:2.8750.03125代码public class Huawei求小球落地5次后的经历的路程和第五次反弹高度 { public static void main(String[] args) throws IOE原创 2021-06-08 09:34:51 · 137 阅读 · 0 评论