Java基础 1.String,StringBuffer和StringBuliderString是字符串常量,StringBuffer和StringBuilder都是字符串变量。String类型是不可改变的对象,由于这种机制,每当用String对字符串做拼接时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,执行效率就会很低。特殊情况:String str = “This is ...
“二叉树的深度”和“平衡二叉树” 题目描述二叉树的深度:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二叉树的节点定义如下:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tre...
输入一个网址后发生了什么 当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP、TCP、HTTP等),以及服务器等各种参与对象上由此引发的一系列活动,请尽可能的涉及到所有的关键技术点。1.DNS解析DNS解析的过程就是寻找哪台机器上有你需要资源的过程,寻找的过程遵循就近原则。输入一个网址并按回车的时候浏览器会根据输入的URL去查...
“和为S的两个数字”和“和为S的连续正数序列” 题目描述和为S的两个数字:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。因为给出的数组是排好序的,所以我们就可以在有序数组中放两个指针用于查找符合条件的两个数字。首先定义两个指针,第一个指针指向数组的第一个(最小的)数字,第二个指针指向数组的第二...
序列化二叉树 题目描述请实现两个函数,分别用来序列化和反序列化二叉树。根据树的前序遍历序列和中序遍历序列可以唯一的构造出一棵二叉树。受此启发,我们可以先把一棵二叉树序列化成一个前序遍历序列和中序遍历序列,然后在反序列化时通过这两个序列重构出原二叉树。这种思路有两个缺点:一是该方法要求二叉树中不能有重复的节点,二是只有当两个序列中的所有数据都读出后才能开始反序列化。如果两个遍历序列的数据是从一个流里读...
连续子数组的最大和 题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序...
对称的二叉树 题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。例如,在下图所示的三棵二叉树中,第一棵二叉树是对称的,而另外两棵不是。我们通常有3种不同的二叉树遍历算法,即前序遍历、中序遍历和后序遍历。在这三种遍历算法中,都是先遍历左子结点再遍历右子结点。那么我们是否可以定义一种遍历算法,先遍历右子结点再遍历左子结点?比如我们针...
两个链表的第一个公共节点 问题描述输入两个链表,找出它们的第一个公共结点。含有公共节点的两个链表的结构类似于下图中的链表:可以看到两个链表中有一个公共节点,其中橙色的节点就是这两个链表的公共节点。 看到这个题目,容易想到的方法是使用蛮力法解决:在第一个链表上顺序遍历每一个节点,每遍历到一个节点,就在第二个链表上顺序遍历每个节点。如果在第二个链表上有一个节点与第一个链表上的节点一样,则说明两个链表在这个...
链表中环的入口节点 问题描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。有环链表类似于下图中的链表:可以看到该链表中有一个环,其中橙色的节点就是这个链表中环的入口节点。 解决这个问题可以分三步。(1)第一步是确定一个链表中是否包含环。我们可以用两个指针来解决这个问题。定义两个指针,同时从链表的头结点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追...
判断链表是否有环? 题目描述有一个单向链表,链表当中有可能出现“环”,就像下图这样。如何用程序判断出这个链表是有环链表? 方法一:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新节点之前的所有节点当中存在相同节点ID,则说明该节点被遍历过两次,链表有环;如果之前的所有节点当中不存在相同的节点...
Bitmap算法简介 Bitmap算法中文又叫做位图算法。那么什么是Bitmap算法呢?位图算法中的位图是内存中连续的二进制位(bit),用于对大量整形数据做去重和查询。举个例子,给定一块长度是10bit的内存空间,想要依次插入整形数据4,2,1,3。我们需要怎么做呢?1. 给定长度是10的bitmap,每一个bit位分别对应着从0到9的10个整型数。此时bitmap的所有位都是0。2. 把整型数4...
BitSet的应用 1.BitSet介绍BitSet是用于存储二进制位和对二进制进行操作的Java数据结构,BitSet从jdk1.0开始就有了。它存储的是二进制位在BitSet中状态,根据对这些状态的判断,可以有很多应用。以前对数据的操作都是先把数据都是存储在内存中间的,现在可以通过设置BitSet的相应位达到存储数据信息的目的,极大的节省了内存空间。2.BitSet应用BitSet可以做的事情主要分为...
BitSet的实现原理 1.BitSet介绍Bitset是Java中的一种数据结构。Bitset中主要存储的是二进制位,做的也都是位运算,每一位只用来存储0,1值,主要用于对数据的标记。Bitset的基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用的时候可以根据某一个位是否为0表示此数是否出现过。JDK中的BitSet集合对是布隆过滤器中经常使用的数据结构Bitmap的相对简单的实现...
反转链表 题目描述输入一个链表,反转链表后,输出新链表的表头。链表的数据结构如下:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}[反转链表]也叫做[链表逆置].比如一个链表是这样的:1->2-&...
青蛙变态跳台阶问题 题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n) = f(n-1) + f(n-2) + ... + f(1)因为f(n-1) = f(n-2)...
青蛙跳台阶问题 题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。如果有两级台阶,那就有两种跳法:一种是分两次跳,每次跳1级;另一种就是一次跳2级。接着我们再谈论一般情况。我们把n级台阶时的跳法看成n的函数,记为f(n)。当n>2 时,第一次跳的时候就有两种...
MYSQL存储引擎 1.什么是存储引擎?有什么作用?MySQL是用来保存数据的,MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者特定的功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。因此我们就可...
MYSQL索引 1.什么是索引?怎么样创建索引?索引是对数据表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。(1)直接创建索引CREATE INDEX index_name ON table(column(length))(2)修改表结构的方式添加索引ALTER TABLE table_name ADD INDEX index_name ON (column(...
数据库中的事务 1.事务的特性:ACID如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:(1)原子性( Atomicity):事物作为单个逻辑单元执行的一组操作, 事务中的所有操作要么全部执行成功,要么全部执行失败。要么全都执行,要么全都不执行。(2)一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须...