
面试
蜗牛互联网
阿里P7,Java 后端方向,欢迎关注和私信~
展开
-
UML 视图常用元素参考
1. 用例图常用元素2. 类图常用元素3. 活动图常用元素4. 状态图常用元素5. 时序图常用元素6. 协作图常用元素原创 2022-03-10 08:00:00 · 415 阅读 · 0 评论 -
排序算法稳定性
定义排序前后两个相等的数相对位置不变,则稳定稳定性的好处从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用各排序算法的稳定性堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法冒泡排序小的元素往前调或者把大的元素往后调比较是相邻的两个元素比较,交换也发生在这两个元素之间稳定排序算法选择排序每个位置选择当前元素最小的在一趟选择中,如果当前元素比一个元素小,而该原创 2022-03-09 08:00:00 · 264 阅读 · 0 评论 -
【Java实现经典算法】有理数四则运算
题目描述本题要求编写程序,计算2个有理数的和、差、积、商。输入描述:输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。输出描述:分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目原创 2022-03-08 08:00:00 · 799 阅读 · 0 评论 -
【Java实现经典算法】找出数组中重复最多的数
找出数组中重复最多的数public static int getRepeatMost(int a[]){ Map<Integer,Integer> map = new HashMap<Integer,Integer>(); //记录每个元素出现的次数 for(int i = 0;i < a.length;i++){ if(map.containsKey(a[i])){ map.put(a[i], map原创 2022-03-07 08:00:00 · 1901 阅读 · 1 评论 -
校招来袭,我把当年进阿里的学习笔记拿出来分享给大家~
每年春天和秋天,对于第二年毕业,打算从事互联网行业工作的同学,都是特别重要的两个季度。因为各个厂的校园招聘集中在这两个季度,春招主要是实习生招聘,秋招主要是正式招聘。天气...原创 2022-03-05 20:02:00 · 356 阅读 · 0 评论 -
【Java 实现经典算法】数字黑洞
题目描述给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。输入描述输入给出一个(0, 10000)区间内的正整数N。输出描述:如果N的4位数字全相等,则在一行内输出“N - N = 0000”否则将计算的每一步在一行内输出,直到6174作为差出现注意每个数字按4位数格式输出。代码实现pa原创 2022-03-04 08:00:00 · 495 阅读 · 0 评论 -
【Java 实现经典算法】每K个结点反转单链表
题目描述给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。思路通过链表长度和K值确定需要反转的结点数每K个反转成新链表,把头保存到List中需要反转的结点数已到并且剩下的结点数不足K个,不反转,即把当前结点存到List中把List中各个链表连接代码package com.liuyong666.pat;impo原创 2022-03-02 03:00:00 · 579 阅读 · 0 评论 -
【Java 实现经典算法】科学计数法
题目描述科学计数法是科学家用来表示很大或很小的数字的一种方便的方法其满足正则表达式[±][1-9]"."[0-9]+E[±][0-9]+即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留输入描述:每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。输出描述:对每个测试用例,原创 2022-02-28 08:00:00 · 2752 阅读 · 0 评论 -
Java 实现经典算法之格雷码
格雷码格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示假设使用 n 位元来表示每个数字,任两个数之间只有一个位元值不同如果要产生n位元的格雷码,那么格雷码的个数为2^nn位元格雷码是基于n-1位元格雷码产生的算法产生 0, 1 两个字符串。在第一步的基础上,每一个字符串都加上0和1,但是每次只能加一个,所以得做两次。这样就变成了 00,01,11,10 (注意对称)。在第二步的基础上,再给每个字符串都加上0和1,同样,每次只能加一个,这样就变成了 000,001,01原创 2022-02-19 11:46:54 · 632 阅读 · 0 评论 -
剑指Offer之三十-最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解法1对数组排序,取前边k个数存到list集合中该解法时间复杂度依赖于排序代码实现public ArrayList<Integer> getLeastNumbers(int [] input, int k) { ArrayList<Integer> list = new ArrayList<Integer>(); i原创 2022-02-23 08:15:00 · 131 阅读 · 1 评论 -
剑指Offer之二十九-数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解法1使用map,键存元素,值存出现的次数发现有某个元素的次数超过数组长度的一半,则返回该元素代码实现public int moreThanHalfNum(int [] array) { if(array == null || array.length == 0原创 2022-02-21 08:15:00 · 190 阅读 · 0 评论 -
剑指Offer之二十八-字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。结果请按字母顺序输出。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路先不考虑是否出现重读字符,要对一个字符进行全排列,可以把第一个字符和后面的字符看成两部分而第一个字符后面的字符又可以看成第一个字符和后面两部分,是一个递归过程只要第一个字符的位置没有到达字符串的末尾原创 2022-02-20 10:00:00 · 138 阅读 · 0 评论 -
剑指Offer之二十七-二叉搜索树与双向链表
二叉树结构class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:由于二叉搜索树的中序遍历就是排序的,如果是构造单链表,原创 2022-02-18 08:30:00 · 110 阅读 · 0 评论 -
剑指Offer之二十六-复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。复制一个复杂链表结点定义class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; public RandomListNode(int label){ this.label = label; }}解析遍历链表,每个结点后边复制相同的结原创 2022-02-17 08:30:00 · 174 阅读 · 0 评论 -
剑指Offer之二十五-二叉树中和为某一值的所有路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解析先序遍历,将遍历过的结点放到A集合中当遍历到叶子结点并且和恰好是目标值时,将遍历经过的所有结点放到B集合中,B则是满足题意的一条路径如果遍历到叶子结点和仍然不等于目标值,那么就移除A集合中添加的结点,修改和,切换到右孩子结点重新计算如果没有遍历到叶子结点就从孩子结点中继续寻找这样的路径二叉树定义class TreeNode {原创 2022-02-16 08:30:00 · 104 阅读 · 0 评论 -
剑指Offer之二十四-二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回ture,否则返回false。假设输入的数组的任意两个数字都互不相同。解析找到根结点从头遍历序列,第一个比根结点大的元素为右子树的起点判断右子树是否都比根结点大,若不是返回false,若是,进行下一步分别把左子树和右子树都以上面规则进行判断,若左右子树都能返回true,则整个序列为二叉搜索树的后序遍历序列,返回true代码实现public boolean verifySquenceOfBST(in原创 2022-02-15 08:30:00 · 78 阅读 · 0 评论 -
剑指Offer之二十三-从上往下打印二叉树
二叉树结构class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析考察层序遍历每一次打印一个结点的时候,如果该结点有子节点,则把该结点的子节点放到一个队列的末尾。接下来到队列的头部原创 2022-02-13 11:25:54 · 93 阅读 · 0 评论 -
剑指Offer之二十二-栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列12345是某栈的压栈序列,序列45321是该压栈序列对应的一个弹出序列,但43512就不可能是该压栈序列的弹出序列。解析栈的特点是FIFO压入序列是确定的,则压入序列之间的元素可能会经历压入后马上被弹出的情况具体思路为:根据弹出序列的第一个值,判断在该元素之前被压入栈的所有元素.栈顶元素与弹出序列第一个值进行比较,等则判断弹出序列的下一个元素,判断依原创 2022-02-11 08:45:00 · 351 阅读 · 0 评论 -
剑指Offer之二十一--包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解析在数据栈的基础上维护一个用来存放最小值的辅助栈每次入栈,新入栈的元素都要和辅助栈栈顶元素比较,如果新入栈的元素更小,就让它也加入最小栈中,否则最小栈再次压入其栈顶元素每次出栈,数据栈和辅助栈同时弹出元素这样就可以保证在任何情况下,辅助栈栈顶元素始终是数据栈中的最小元素代码实现public class MinFunctionStack{ Stack<Integer> data = new原创 2022-02-10 08:45:00 · 169 阅读 · 0 评论 -
剑指Offer之二十--顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10解析因为每打印一圈都会改变起始坐标,所以需要先确定矩阵大小与起始坐标的关系比如4阶矩阵,第一圈起始坐标为(0,0),第二圈起始坐标为(1,1),.原创 2022-02-09 08:45:00 · 352 阅读 · 0 评论 -
作为面试官,我最关心候选人哪些特质
一、前言最近频繁面试社招的同学,所以我想结合自己的亲身体验,谈谈作为面试官,我最关心候选人哪些特质。在面试官视角,其实我的面试经验不太多,有过校招,有过社招,面试过的人基本两只手就可以数的过来。不过这些为数不多的候选人,给了我真实的面试体验,也让我对考察人这件事上有了新的理解。二、面试流程近期先后面试了两位候选人,都是社招,岗位是 Java 后端方向,面试时长 60 分钟。因为是社招,所以主要通过候选人做过的项目,考察他的技术基础、工程素养、协作能力以及解决问题的能力。面试的基本套路就是 STAR 原则,也原创 2022-02-08 11:36:38 · 844 阅读 · 0 评论