Java基础
文章平均质量分 87
kiss火葱花
这个作者很懒,什么都没留下…
展开
-
Abstract Queue Synchronizer——AQS
AQS 的全称为(AbstractQueuedSynchronizer),是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出同步器, 如ReentrantLock,Semaphore,ReentrantReadWriteLock ,SynchronousQueue等。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。原创 2023-02-08 15:17:42 · 463 阅读 · 0 评论 -
线程安全与锁机制
Java线程安全与锁机制原创 2022-11-07 19:13:29 · 307 阅读 · 0 评论 -
线程安全与锁机制
一、什么是线程安全线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,即这个对象是线程安全的。Java中的线程安全,就是多个线程之间访问共享数据时,能够正确访问。将Java中访问共享数据的操作由线程安全的“安全程度”由强至弱分为:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。(1)不可变:不可变对象一定是线程安全的,如final关键字修饰的基本数据类原创 2020-09-01 14:15:36 · 566 阅读 · 0 评论 -
Java面试——手撕快速排序
public class test { public static void quickSort(int[] a, int left, int right) { if (left > right || left < 0 || right > a.length - 1) { return; } int key = a[left]; int i = l...原创 2020-06-04 20:21:52 · 415 阅读 · 0 评论 -
剑指offer(第二版)面试题13:机器人的运动范围(Java)
题目 地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左,向右,向上,向下移动一格,但不能进入行坐标和列坐标的位数之和大于k的格子。例如:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18;但它不能进入方格(35,38),因为3 + 5+3+8 = 19.请问该机器人最多能到达多少个格子?解题思路 和前面...原创 2019-07-21 15:20:41 · 157 阅读 · 0 评论 -
剑指offer(第二版)面试题14:剪绳子(Java)
题目:给定一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]* k[1] * … *k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。解题思路:1、动态规划 定义函数f(n)表示为把长度为n的绳子...原创 2019-07-21 16:11:15 · 482 阅读 · 0 评论 -
剑指offer(第二版)面试题29:顺时针打印矩阵(Java)
题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。解题思路 ...原创 2019-07-25 21:52:24 · 195 阅读 · 0 评论 -
剑指offer(第二版)面试题31:栈的压入、弹出序列(Java)
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路建立一个辅助栈,把输入的第一个序列中的数字因此压入该辅助栈,并按照第二...原创 2019-07-26 09:05:11 · 141 阅读 · 0 评论 -
剑指offer(第二版)面试题19:正则表达式匹配(Java)
题目请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配解题思路递归实现每次分别在str 和pattern中取一个字符进行匹配,如果匹配,则...原创 2019-07-23 12:20:11 · 146 阅读 · 0 评论 -
剑指offer(第二版)面试题34:二叉树中和为某一值的路径(Java)
题目输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}解题思路先说一个具体的例子,输入下图的二叉...原创 2019-08-05 14:37:36 · 165 阅读 · 0 评论 -
剑指offer(第二版)面试题36:二叉搜索树与双向链表(Java)
题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路 利用分治策略,将排序二叉树分为左子树和右子树两个部分,其中左子树的最后一个节点为根节点的前一节点,右子树的第一个节点为根节点的后一个节点,二叉排序树中分为左节点和右节点,可以利用左节点存储前节点,右节点存储后节点,利用迭代计算的方式得到双向...原创 2019-08-05 15:39:48 · 206 阅读 · 0 评论 -
剑指offer(第二版)面试题48:最长不含重复字符的子字符串(Java)
题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。例如,在字符串中”arabcacfr”,最长非重复子字符串为”acfr”,长度为4。解题思路动态规划思想 通过一个额外数组存储出现过字符的地址,数组默认为0,额外变量Max记录最长不重复子字符串长度,len积累当前子字符串长度。分两种情况:...原创 2019-08-09 14:54:46 · 973 阅读 · 0 评论 -
Java开发+大数据开发-凉面考点总结
1、HDFS数据完整性校验 (a)校验和:Hadoop在写入数据到HDFS上时,会为每一个固定长度(默认是512字节)的数据执行一次“校验和”,“校验和”的值和数据一起保存起来。在传输前和传输后分别计算一个校验和,比较两者之间的值,常采用32位循环校验码的方式(CRC32)。 (b)数据块检测程序DataBlockScanner:DataNode运行着一个后台进程(DataBl...原创 2019-08-22 21:22:44 · 232 阅读 · 0 评论 -
LeetCode——SingleNubmber Ⅱ
题目 给定一组数字,这些数字里面每一个都重复出现了三次,只有一个数字只出现了一次,要求在O(n)时间和O(1)空间消耗内解出来。解题思路 时间复杂度要求O(n),因此不能排序后再进行遍历,同时空间复杂度为O(1),考虑通过位图计算,因为计算机中任何数据都是以二进制方式进行存储,因此可以利用位运算得出出现一次的数字。设计one,two,three分别表示出现一次、两次...原创 2019-08-16 16:52:58 · 188 阅读 · 0 评论 -
JAVA基础-第五部分
1、进程与线程关系 1)一个线程只属于一个进程,一个进程至少拥有一个或多个线程; 2)进程作为资源调度的基本单位,所有线程共享该进程资源; 3)线程作为调度的基本单位,真正实现在处理机上执行; 4)线程执行过程需要协作同步,不同进程的线程利用消息通信同步。2、进程与程序的区别 1)程序是一组有序的静态指令,进程是一次程序的执行过程 2)程序可以长期保...原创 2019-07-25 14:24:14 · 257 阅读 · 0 评论 -
剑指offer(第二版)面试题12:矩阵中的路径(Java)
题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如在下面的3×4的矩阵中包含一条字符串“BFCE”的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串“ABFB”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二...原创 2019-07-21 13:11:32 · 205 阅读 · 0 评论 -
Java面试-基础第二部分
JAVA基础第二部分String类为什么是final的。主要是为了“效率”和“安全性”的缘故。因为String使用率较高,因此final方法编译器会采取内联方式实现,JVM执行效率得到提高;String作为HashMap的key以及其他场合的时候,需要保持不可变性,否则会发生错误,因此需要声明成final的。2、HashMap的源码,实现原理,底层结构。3、list、set、queu...原创 2019-07-09 20:12:46 · 179 阅读 · 0 评论 -
JAVA面试-基础第三部分
JAVA基础第三部分1、Java的内存模型以及GC算法详见第一部分。2、jvm性能调优都做了什么控制GC行为、控制JVM堆栈大小、控制JVM线程的内存分配。3、介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明1) 程序计数器:保存当前线程执行的内存地址,线程私有区域,唯一一块不会报OutOfMemoryError(内存溢出)的区域;2) Java栈:每创...原创 2019-07-09 20:15:33 · 343 阅读 · 0 评论 -
JAVA面试-基础第四部分
JAVA基础第四部分1、Collection和Collections的区别Collection是一个集合接口,提供对集合对象进行基本操作的通用接口方法。Collections是针对集合类的一个包装类,它提供一系列静态方法实现对各种集合的搜索、排序以及线程安全化等操作。2、数组有没有length()这个方法? String有没有length()这个方法数组中没有length...原创 2019-07-09 20:17:15 · 129 阅读 · 0 评论 -
校招字节跳动——面试
1、join、left join 、 full join和cross join区别 join等价于inner join内连接,返回两个表中都有的符合条件的行; left join左连接,返回左表中所有的行和右表中符合条件的行; full join全连接,返回左表中所有的行和右表中所有的行,并按条件连接。 cross join笛卡尔积,返回左表...原创 2020-07-25 09:49:12 · 388 阅读 · 0 评论 -
剑指offer(第二版)面试题4:二维数组中的查找(Java)
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(1)首先选取数组中右上角的数字:如果该数字等于要查找的数字,查找过程结束;(2)如果该数字大于要查找的数字,则剔除这个数字所在的列;(3)如果该数字小于要查找的数字,则剔除这个数字所在的行。即:如果要查找的...原创 2019-07-18 19:47:34 · 127 阅读 · 0 评论 -
剑指offer(第二版)面试题7:重建二叉树(Java)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字。例如输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1,5, 3, 8, 6},则重建出二叉树并输出它的头结点。知识点:前序遍历:先访问根节点,再访问左子结点,最后访问右子结点;(根左右)中序遍历:先访问左子结点,...原创 2019-07-18 21:24:30 · 174 阅读 · 0 评论 -
剑指offer(第二版)面试题8:二叉树的下一个节点(Java)
题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。解题思路:分情况讨论:1、如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点;2、如果一个节点没有右子树,如果节点是它父节点的左子节点,下一个节点就是它的父节点;3、如果一个节点既没有右子树,还是父节点的右...原创 2019-07-19 12:12:54 · 169 阅读 · 0 评论 -
剑指offer(第二版)面试题9:用两个栈实现队列(Java)
题目:用两个栈来实现一个队列,完成队列的appendTail和deleteHead操作。 队列中的元素为int类型。解题思路:每次push是时先将stack2清空放入stck1(保证选入的一定在栈底),stack2始终是用来删除的。在pop前,先将stack1中中的数据清空放入stack2(保存后入的在栈底),stack1始终用于push。代码如下:import java.u...原创 2019-07-19 14:08:17 · 145 阅读 · 0 评论 -
剑指offer(第二版)面试题11:旋转数组的最小数字(Java)
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。解题思路:分类讨论即可,数组在一定程度上是排序的,很容易分析出:可以采用二分法来寻找最小数字。但特例如:1.递增排序数组的本身是自己的旋转,则最小数字是第...原创 2019-07-19 21:22:50 · 134 阅读 · 0 评论 -
剑指offer(第二版)面试题23:链表中环的入口节点(Java)
题目如果一个链表中包含环,如何找出环的入口节点?解题思路可以用两个指针来解决这个问题。先定义两个指针P1和P2指向链表的头结点。如果链表中环有n个结点,指针P1在链表上向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口结点时,第一个指针已经围绕着环走了一圈又回到了入口结点。剩下的问题就是如何得到环中结点的数目。我们可以使用一快一慢的两个指针。如果两个指针相遇,...原创 2019-07-24 21:38:45 · 121 阅读 · 0 评论 -
剑指offer(第二版)面试题24:反转链表(Java)
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。解题思路:运用两个额外节点保存当前节点上一节点和当前节点下一节点,依次遍历时,改变当前节点指向前一节点,直到遍历完成代码如下:import java.io.IOException;public class test { public static void main(String[] a...原创 2019-07-25 09:56:55 · 219 阅读 · 0 评论 -
剑指offer(第二版)面试题26:树的子结构(java)
题目输入两棵二叉树A和B,判断B是不是A的子结构。例如图中所示的两棵二叉树,由于A中有一部分子树的结构和B 是一样的,因此B是A的子结构。解题思路要查找树A中是否存在和树B结构一样的子树,思路是第一步:先在树A中查找与根结点的值一样的结点,这实际就是树的先序遍历,当树A和树B为空时,定义相应的输出。如果树A某一结点的值和树B头结点的值相同,则调用findnext,做第二步判断。...原创 2019-07-25 10:42:23 · 145 阅读 · 0 评论 -
剑指offer(第二版)面试题28:对称的二叉树(Java)
题目请实现一个函数,用来判断一棵二叉树是不是对称的,如果一棵二叉树和他的镜像是一样的,那么它是对称的。解题思路可以递归的方式进行查找,首先第二层,满足左节点等于右节点,然后分别将左节点和右节点作为参数传入checknext函数,在函数中,利用左节点的left与右节点的right、左节点的right与右节点的left递归判断,同时满足条件时进行下一层判断,当其中有一个为空或者不等,跳出递...原创 2019-07-25 11:12:22 · 163 阅读 · 0 评论 -
Java面试-基础第一部分
Java面试-基础第一部分JAVA基础第一部分JVM结构原理、GC工作机制详解JVM分为四个部分:类加载器(ClassLoader):在JVM启动或者类运行时将需要的class加载到JVM中;执行引擎:负责执行class文件中包含的字节码指令;本地方法接口:主要是调用C或C++实现的本地方法及返回结果;内存区:JVM运行时操作分配的内存区。分为5个区域:...原创 2019-07-09 20:06:48 · 162 阅读 · 0 评论