- 博客(24)
- 收藏
- 关注
原创 阻塞队列的原理
一、什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列不保证公平:公平是指先阻塞的线程先访问队列,公平性会降低吞吐率常见的有以下几种(1)ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列(数组结构可配合指针实现一个环形...
2020-03-15 19:23:15 1610
原创 线程池的参数详解
一、ThreadPoolExecutor的方法说明为了方便测试,先学习一下相关的方法1.继承关系Executor是一个顶层接口,在它里面只声明了一个方法execute(Runnable),返回值为void,参数为Runnable类型,从字面意思可以理解,就是用来执行传进去的任务的ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAl...
2020-03-15 14:35:04 4442 1
原创 ThreadLocal应用及原理
1.如何创建ThreadLocal构造函数如下所示// 1. 直接创建对象private static ThreadLocal myThreadLocal = new ThreadLocal()// 2. 创建泛型对象private static ThreadLocal<String> myThreadLocal2 = new ThreadLocal<>();...
2020-03-14 19:41:11 322
原创 链表算法解题思路总结
一、删除结点解题思路哑结点+双指针哑结点:在一个链表的前边添加一个结点双指针:(1)快慢指针(2)前驱指针和工作指针题目来自leetcode和牛客网的剑指offer1.删除链表中的结点leetcode237思路分析找到该节点node的前驱结点,修改结点的next指针,使其指向node的下一个结点。todo 代码扩展:有没有时间复杂度为O(1)的方法?思路分析把将要删除的n...
2020-02-23 18:22:27 1036
原创 二叉树算法解题思路总结(二)
第一步:先考虑用递归的方式解决问题,注意递归的终止条件。有的递归需要用到回溯法和全局变量第二步:如果递归无法解决问题,考虑迭代法,具体的迭代方式参考层序遍历和非递归遍历本篇文章主要介绍迭代法,题目来自leetcode和牛客网的剑指offer六、打印二叉树1.把二叉树打印成多行:牛客网题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行思路分析用一个队列来存储上一...
2020-02-22 23:29:52 396
原创 二叉树算法解题思路总结(一)
第一步:先考虑用递归的方式解决问题,注意递归的终止条件。有的递归需要用到回溯法和全局变量第二步:如果递归无法解决问题,考虑迭代法,具体的迭代方式参考层序遍历和非递归遍历本篇文章只介绍第一步相关的内容,题目来自leetcode和牛客网的剑指offer一、找结点1.二叉搜索树的最近公共祖先:leetcode236题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百...
2020-02-22 22:04:02 2218
原创 Java实现二叉树的遍历(递归和非递归)
现有一颗如下图所示的二叉树一、基本概念(1)先序遍历(深度优先遍历):前、中、后这三个词是针对根节点的访问顺序而言的先访问根结点,再访问左子结点,最后访问右子结点。图中的二叉树的先序遍历的顺序是1 2 4 8 9 5 3 6 7(2)中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。图中的二叉树的中序遍历的顺序是8 4 9 2 5 1 6 3 7(3)后序遍历:先访问...
2020-02-22 15:09:38 778
原创 8.12网易内推笔试题:堆棋子
小易将n个棋子摆放在一张无限大的棋盘上。第i个棋子放在第x[i]行y[i]列。同一个格子允许放置多个棋子。每一次操作小易可以把一个棋子拿起并将其移动到原格子的上、下、左、右的任意一个格子中。小易想知道要让棋盘上出现有一个格子中至少有i(1 ≤ i ≤ n)个棋子所需要的最少操作次数.输入描述:输入包括三行,第一行一个整数n(1 ≤ n ≤ 50),表示棋子的个数第二行为n个棋子的横
2017-08-14 23:38:03 462
原创 8.12网易内推笔试题:小易喜欢的数列 java实现
[编程题] 小易喜欢的数列时间限制:1秒空间限制:32768K小易非常喜欢拥有以下性质的数列:1、数列的长度为n2、数列中的每个数都在1到k之间(包括1和k)3、对于位置相邻的两个数A和B(A在B前),都满足(A 例如,当n = 4, k = 7那么{1,7,7,2},它的长度是4,所有数字也在1到7范围内,并且满足第三条性质,所以小易是喜欢这个数列的但
2017-08-14 23:35:48 429
转载 Java搞定面试中的二叉树题目
package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack;
2017-08-07 16:31:19 168
原创 携程4月11日编程题 输出最大乘积 java
问题描述有一个整数n,将n分解成若干个不同自然数之和,问如何分解能使这些数的乘积最大,输出这个乘积m动态规划根据题意,对于一个整数n,必然存在一个整数x,使得从n中分解出整数x可以使其最后获得最大乘积,这要求对n-x的分解也是最优解。我们用dp[i][j]表示从整数i分解出整数j的这种情况下,能达到的最大乘积。那么dp[i][j]可以递归的定义为dp[i][j]={1max
2017-08-06 17:25:21 392
转载 Spring常见面试问题
以下为spring常见面试问题:1、什么是Spring框架?Spring框架有哪些主要模块?Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心
2017-08-01 19:27:48 234
原创 牛牛和羊羊猜数字游戏 java
/** * * 牛牛和羊羊在玩一个有趣的猜数游戏。在这个游戏中,牛牛玩家选择一个正整数,羊羊根据已给的提示猜这个数字。第i个提示是"Y"或者"N",表示牛牛选择的数是否是i的倍数。例如,如果提示是"YYNYY",它表示这个数使1,2,4,5的倍数,但不是3的倍数。注意到一些提示会出现错误。例如: 提示"NYYY"是错误的,因为所有的整数都是1的倍数,所以起始元素肯
2017-07-27 11:23:12 4261
转载 JAVA多线程实现和应用总结
最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结。1.JAVA多线程实现方式JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。2.继承Thread类实现多线程继承T
2017-07-27 09:18:48 201
转载 HashMap的工作原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入
2017-07-25 21:19:27 143
转载 关于正则表达式的一道面试题
import java.util.Arrays;public classip_test { /** * "172.25.27.1 3.25.118.32 105.38.225.12" * 对上面字符串把ip地址切割出来进行排序 , 如果直接排序,得出的结果是105.38.225.12 172.25.27.1 3.25.118.32 不符合要求 * */
2017-07-24 14:36:19 195
原创 java正则表达式
一、符号表示(1)字符. \\.任何字符 .数字 [0-9] \d单词字符 [a-zA-Z0-9] \w其他字符 [^a-zA-Z0-9]反斜线 \\换行 \n回车 \r(2)数量词一次或一次也没有 ?零次或多次 *一次或多次
2017-07-24 14:22:42 203
原创 常见数据结构的查找、插入、删除时间复杂度
查找 插入 删除数组 o(n) o(1) o(n)有序数组 o(lgn) o(n) o(n)链表 o(n) o(1) o(n)有序链表 o(n) o(n) o(n)二叉树最坏 o(n)
2017-07-24 10:55:39 9552 1
原创 哈希表
1.什么是哈希表:元素是链表的数组Hash Table,也叫散列表,是根据关键码值(Key Value)而直接进行访问的的一种数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找速度。这个函数叫做散列函数,存放记录的数组叫做散列表。哈希表隐藏了内部细节, 而对外的使用则非常的简单.只需定义key的hash函数和compare函数即可. 2.哈希表时间复杂
2017-07-24 10:38:59 254
原创 关于树的面试题
1.完全二叉树与满二叉树:(1)满二叉树:要么是叶子结点(结点的度为0),要么结点同时具有左右子树(结点的度为2)。(2)完全二叉树:除了最后一层以外,每层结点都完全填满,在最后一层上如果不是满的,则只缺少右边的若干结点。(3)完美二叉树:每层结点都完全填满。 2.哈夫曼树给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最
2017-07-24 10:07:27 4002 1
原创 java中的容器
当我们不知道要存储多少元素时,我们无法使用数组,需要使用容器,注意容器只能存储引用类型 为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求。JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set M
2017-07-22 21:40:20 177
原创 FileReader和BufferedReader的区别
1.FileReader不能一行行读,BufferedReader可以一行行地读2.BufferedReader可以一行行地读效率高,因为减少了IO的次数
2017-07-22 21:31:46 7860 1
原创 java中compareTo和compare方法之比较
这两个方法经常搞混淆,现对其进行总结以加深记忆。1. compareTo(Objecto)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable接口的,必须重写public int compareTo(T o)方法,假设我们通过 x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比
2017-07-22 21:27:38 1147
原创 java并发面试题
1. 线程与进程的区别(1)进程是具有一定独立功能的程序,是操作系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。(2)进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。(3)进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。 2.实现多
2017-07-20 10:16:50 378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人