![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔试面试
DzHebut
程序猿。
展开
-
从上到下打印二叉树
public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list= new ArrayList<Integer>(); if(root==null) return list; Queue<TreeNode> queue = .原创 2021-12-17 09:11:15 · 133 阅读 · 0 评论 -
判断二叉搜索树的后序遍历
//输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence == null || sequence.length == 0)return false; return helpVerify(seq.原创 2021-12-16 11:40:25 · 686 阅读 · 0 评论 -
左旋转字符串
public class LeftRotateStringSolution { public String LeftRotateString(String str,int n) { int len = str.length(); if(len == 0) return ""; n = n % len; String s1 = str.substring(0, n); String s2 = str.substring(.原创 2021-12-16 11:39:52 · 94 阅读 · 0 评论 -
翻转单词顺序
public class ReverseSentenceSolution { public String ReverseSentence(String str) { if(str==null||str.trim().length()==0) return str; StringBuffer sb = new StringBuffer(); String[] s = str.split(" "); for(int.原创 2021-12-16 11:39:17 · 77 阅读 · 0 评论 -
括号匹配算法
import java.util.*;public class IsValidSolution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c =.原创 2021-12-16 11:38:46 · 54 阅读 · 0 评论 -
斐波那契数列
public class FibonacciSolution { public int Fibonacci(int n) { if (n == 1 || n == 2) { //特殊情况,分开讨论 return 1; } if (n > 2) { return Fibonacci(n - 1) + Fibonacci(n - 2); //递归调用 }.原创 2021-12-16 11:38:07 · 44 阅读 · 0 评论 -
数组中和为S的两个数字
//输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<Integer>(); if (a.原创 2021-12-16 11:37:24 · 1177 阅读 · 0 评论 -
Java基础
六个原则(面向对象、设计模式)单一原则,开闭原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则Java 基本数据类型byte:1 个字节,8 位 (-2^7–2^7-1) -128–127short:2 个字节,16 位 (-2^15–2^15-1) -32768—32767int:4 个字节,32 位 (-2^31–2^31-1) -2,147,483,648–2,147,483,647long:8 个字节,64 位 (-2^63–2^63-1)float:4 个字节,32 位d原创 2021-12-15 08:54:42 · 50 阅读 · 0 评论 -
替换空格算法
public class Solution { public String replaceSpace(StringBuffer str) { StringBuffer s =new StringBuffer(); for(int i=0;i<str.length();i++){ if(str.charAt(i)==' ') s.append("%20"); else{ .原创 2021-12-15 08:55:26 · 49 阅读 · 0 评论 -
反转链表算法
public class ReverseListSolution { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode ReverseList(ListNode head) { if(head==null.原创 2021-12-15 08:55:39 · 64 阅读 · 0 评论 -
两个链表的第一个公共结点
/** * 思路:如果有公共节点,1)若两个链表长度相等,那么遍历一遍后,在某个时刻,p1 == p2 * 2)若两个链表长度不相等,那么短的那个链表的指针pn(也就是p1或p2) * 必先为null,那么这时再另pn = 链表头节点。经过一段时间后, * 则一定会出现p1 == p2。 * 如果没有公共节点:这种情况可以看成是公共节点为null,顾不.原创 2021-12-15 08:55:42 · 46 阅读 · 0 评论 -
不用加减乘除做加法
/*首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: 5-101,7-111 第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。第二步:计算进位值,得到1010,相当于各位做与操作得到101,再向左.原创 2021-12-15 08:55:53 · 51 阅读 · 0 评论 -
第一个只出现一次的字符
public class Solution { public int FirstNotRepeatingChar(String str) { if(str==null || str.length() == 0)return -1; int []count = new int[128]; for(int i=0;i<str.length();i++){ count[str.charAt(i)]++; }.原创 2021-12-15 08:55:55 · 49 阅读 · 0 评论 -
删除链表重复结点
/*1. 首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况2.设置 pre ,last 指针, pre指针指向当前确定不重复的那个节点,而last指针相当于工作指针,一直往后面搜索。 */ public class deleteDuplicationSlution { public class ListNode { int val; ListNode next = null; ListNode(int val) { .原创 2021-12-15 08:56:06 · 52 阅读 · 0 评论 -
进程的调度算法
调度算法是指:根据系统的资源分配策略所规定的资源分配算法。常用的调度算法有:先来先服务调度算法、时间片轮转调度法、短作业优先调度算法、最短剩余时间优先、高响应比优先调度算法、优先级调度算法等等。先来先服务调度算法先来先服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方案。当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。该算法既可以用于作业调度,也可以用于进程调度。先来先去服务比较适合于常作业(进程),而不利于段作业(进程)。时间片轮转调度算法原创 2021-12-15 08:56:09 · 265 阅读 · 0 评论 -
LRU算法的理解
LRU(Least recently used,最近最少使用)算法作为内存管理的一种有效算法,其含义是在内存有限的情况下,当内存容量不足时,为了保证程序的运行,这时就不得不淘汰内存中的一些对象,释放这些对象占用的空间,那么选择淘汰哪些对象呢?LRU算法就提供了一种策略,告诉我们选择最近一段时间内,最久未使用的对象将其淘汰,至于为什么要选择最久未使用的,因为其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1、最开始时,内存空间是空的,因此依次进入A、B、C是没有问题的。2、原创 2021-12-15 08:56:12 · 754 阅读 · 0 评论 -
物理地址、逻辑地址、虚拟内存
物理地址:它是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取,是内存单元真正的地址。逻辑地址:是指计算机用户看到的地址。例如:当创建一个长度为 100 的整型数组时,操作系统返回一个逻辑上的连续空间:指针指向数组第一个元素的内存地址。由于整型元素的大小为 4 个字节,故第二个元素的地址时起始地址加 4,以此类推。事实上,逻辑地址并不一定是元素存储的真实地址,即数组元素的物理地址(在内存条中所处的位置),并非是连续的,只是操作系统通过地址映射,将逻辑地址映射成连续的,这样更原创 2021-12-15 08:56:24 · 1677 阅读 · 0 评论 -
CPU缓存
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。CPU缓存的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决C原创 2021-12-16 11:34:05 · 1112 阅读 · 0 评论 -
HashMap引入红黑树问题
二叉查找树二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树。没有键值相等的节点(no duplicate nodes)。因为一棵由n个结点随机构造的二叉查找树的高度为lgn,所以顺理成章,二叉查找树的一般原创 2021-12-16 11:34:40 · 143 阅读 · 0 评论 -
海量数据中TopK问题
1. 抛出问题在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。例如,在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载最高的前10首歌等。针对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆(就是上面提到的最小堆),即先将数据集按照Hash方法分解成多个小数据集,然后使用Trie树活着Hash统计每个小数据集中的query词频,之后用小顶堆求出每个数据集中出现频率最高原创 2021-12-16 11:34:21 · 193 阅读 · 0 评论 -
深入理解JVM内存分配原则
1、大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC2、大对象直接进入老年代。大对象指需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串以及数组。3、长期存活的对象将进入老年代。虚拟机采用分代收集的思想来管理内存,那么内存回收时就必须能识别哪些对象应放在新生代,哪些对象应放在老年代中。为了做到这一点,虚拟机给那个对象定义了一个对象年龄计数器。如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能背Su原创 2021-12-16 11:34:53 · 65 阅读 · 0 评论 -
数据库建立索引的一般依据
建立索引常用的规则如下:1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:A、正确选择复合索引中的主列字段,一般是选择性较好的字段;B、复合索引的几个字段是否经常同时原创 2021-12-14 15:51:01 · 1487 阅读 · 1 评论 -
Spring常用的注解
一.注解:注解分为两类,一种是使用bean的(@Autowired , @Resource),一种是注册bean的(@Component , @Repository , @ Controller , @Service , @Configration)1.@Bean注解@Bean 标识一个用于配置和初始化一个由SpringIoc容器管理的新对象的方法,类似于XML配置文件的,一般与@Configration注解配合使用注册bean:2.@Service注解首先,在配置root-config.xm原创 2021-12-14 15:49:09 · 613 阅读 · 0 评论 -
线程和进程
并发和并行的理解?并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生;并行是在不同实体上的多个事件,并发是在同一实体上的多个事件;同步、异步、阻塞、非阻塞的概念同步:当一个同步调用发出后,调用者要一直等待返回结果。通知后,才能进行后续的执行。异步:当一个异步过程调用发出后,调用者不能立刻得到返回结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。阻塞:是指调用结果返回前,当前线程会被挂起,即阻塞。非阻塞:是指即使调用结果没返回,也不会阻塞当前线原创 2021-12-14 15:48:13 · 375 阅读 · 0 评论 -
进程间的通信方式
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC 的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams 等。其中 Socket 和 Streams 支持不同主机上的两个进程 IPC。管道1 它是半双工的,具有固定的读端和写端;2 它只能用于父子进程或者兄弟进程之间的进程的通信;3 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read、write 等函数。但是它不是普通的文件,原创 2021-12-14 15:47:29 · 83 阅读 · 0 评论 -
从尾到头打印链表
import java.util.*;public class PrintListFromTailToHeadSolution { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ArrayList<Integer> prin.原创 2021-12-14 15:46:45 · 797 阅读 · 0 评论 -
链表中环的入口结点
public class EntryNodeOfLoopSolution { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode EntryNodeOfLoop(ListNode pHead){ if(pH.原创 2021-12-14 15:45:43 · 174 阅读 · 0 评论 -
JVM进行FullGC的情况及应对策略
堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示:从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC;对老年代GC称为Major GC;而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生代,即方法区的回收(JDK8中无永生代了)。出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的。Major GC的速度一般会比Minor GC慢10倍以上。下边看看有哪些情况触发JVM进行Fu原创 2021-12-14 15:44:40 · 645 阅读 · 0 评论 -
浅谈RabbitMQ
什么是消息中间件? 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行 分布式系统 的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信消息中间件引出产生背景一、系统之间接口耦合比较严重系统之间直接调用实际工程落地和存在问题 微服务架构后,链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),比如模块 A 调用模块 B,模块 B 调用模块 C,模块 C 调用模块 D。但在大型分布式应用中,原创 2021-12-14 15:43:15 · 1392 阅读 · 0 评论 -
SQL语句学习
创建school数据库create database school;use school;创建四张表create table student( s_id varchar(10), s_name varchar(20), s_age date, s_sex varchar(10));create table course( c_id varchar(10), c_name varchar(20), t_id varchar(10)原创 2021-12-14 15:41:47 · 514 阅读 · 0 评论 -
二叉树深度
public class Solution {public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } public int TreeDepth(TreeNode root) { if (root==null) .原创 2021-12-14 15:33:18 · 44 阅读 · 0 评论