面试
文章平均质量分 73
pengzhisen123
这个作者很懒,什么都没留下…
展开
-
爱奇艺面试题
求字典序的最大子序解题思路:例如一个字符串asdfghj,首先需要遍历一遍字符串,找到字典排序最大的s,然后接下来遍历dfghj,找到最大的j。此时j是最后一个字符,搜索结束,字典排序最大的子字符串即为sj。public static void main(String[] args) { Scanner in=new Scanner(System.in); String转载 2018-04-20 16:56:51 · 975 阅读 · 0 评论 -
synchronized(this)与synchronized(static XXX)的区别
Java语法规定,任何线程执行同步方法、同步代码块 之前,必须先获取对应的监视器。JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchronized(this)与synchronized(s翻译 2018-03-06 09:14:00 · 1002 阅读 · 0 评论 -
Java之访问权限控制符以及结合继承体系引发的注意事项
访问修饰符的作用域:private:可以定义方法或者属性,定义的方法和属性不能被外部的类所访问(包括子类)。default:可以在本包中的任意地方访问。protected:保护,不同包中的非子类不能访问。(能访问的成员包括相同包以及该类的任意子类)public:公共的,都可以访问,不受任何限制。而对于Java中的“类”(不是其内部成员,两者要区分开),其访问权限修饰词仅有public和“defau...转载 2018-03-06 08:48:53 · 372 阅读 · 0 评论 -
Java重写与重载之间的区别
重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时转载 2018-03-05 22:31:09 · 155 阅读 · 0 评论 -
java实现同步的几种方式
为何要同步?java允许许多线程并发控制,当多个线程同时操作一个可共享的资源变量是(如数据的增、删、改、查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。一、实例举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同时发...转载 2018-03-05 22:25:11 · 10257 阅读 · 2 评论 -
ThreadLocal详解
ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都在操作同一个变量,显然是不行的,并且我们也知道volatile这个关键字也是不能保证线程安全的。那么在有一种情况之下,我们需要满足这样一个条件:变量是同一个,但是每个线程都使用同一个初始转载 2018-03-05 22:16:51 · 102 阅读 · 0 评论 -
volatile关键字
一、Java内存模型想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来)。线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的转载 2018-03-05 21:57:44 · 112 阅读 · 0 评论 -
java多线程的实现的四种方式
java多线程实现方法主要有四种:1、继承Thread类2、实现Runnable接口3、实现Callable接口,通过FutureTask包装器来创建Thread线程4、使用ExecutorService、Callable、Future实现有返回结果的多线程。注意:前两种方式线程执行完后都没有返回值,后两种是带返回值的。1、继承Thread类创建线程Thread类本质上是实现了Runnable接口...转载 2018-03-05 20:42:47 · 526 阅读 · 0 评论 -
类型提升
表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。①所有的byte,short,char型的值将被提升为int型;②如果有一个操作数是long型,计算结果是long型;③如果有一个操作数是float型,计算结果是float型;④如果有一个操作数是double型,计算结果是double型;代码片段:原创 2018-03-12 15:08:12 · 539 阅读 · 0 评论 -
java创建对象时,new 出一个对象 和 = null的区别
首先要明白,java里对象传递的时候,传递的都是引用(也就是对象的地址),这比传递整个对象高效的多。而基础类型,int,double等传递的才是值。比如,(new ArrayList<String>).add(new String("hello")),jvm只是把new String("hello")的地址存入到了列表list里面。String str = new String("Te...转载 2018-03-12 11:19:31 · 6765 阅读 · 0 评论 -
wait(),notify(),notifyAll()及sleep() 和wait()的区别
在多线程的情况下,由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。 wait与notify是java同步机制中重要的组成部分。结合与synchronized关键字使用,可以建立很多优秀的同步模型。 synchronized(this){ }等价于publicsynch...转载 2018-03-06 09:33:05 · 356 阅读 · 0 评论 -
求素数
素数: 在大于1的整数中,只能被1和这个数本身整除的数,如2、3、5、7、11。也叫质数。求0-n之间所有的素数。测试用例:20 2 3 5 7 11 13 17 19步骤: 1、把2到n的自然数放入a[2]到a[n]中(所放入的数与下标号相同) ; 2、在数组元素中以下标为序,按顺序找到未曾找过的最小素数minp和它的位置p(即下标号); 3...原创 2018-04-10 11:34:37 · 281 阅读 · 0 评论 -
大数据处理-Bitmap
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)"BIT-MAP空间压缩和快速排序去重1. Bit-map的基本思想 32位机器上,对于一个整型数,比如int a=1 在内存中占32bit位,这是为了方便计算机的运算。但是对于某些应用场景而言,这属于一种巨大的浪费,因为我们可以用对应的32bit位对应存储十进制的0-31个...转载 2018-04-14 13:15:43 · 369 阅读 · 0 评论 -
JAVA多线程 join() 方法详解及应用场景
转载请附带本文地址 http://blog.csdn.net/liuyifeng1920/article/details/53197503在某些情况下,主线程创建并启动了子线程,如果子线程中需要进行大量的耗时运算,主线程往往将早于子线程结束之前结束,如果主线程想等待子线程执行完毕后,获得子线程中的处理完的某个数据,就要用到join方法了,方法join()的作用是等待线程对象呗销毁。[java] v...转载 2018-03-21 10:44:32 · 320 阅读 · 0 评论 -
线程的几种状态转换
Java中的线程的生命周期大体可分为5种状态。1. 新建(NEW):新创建了一个线程对象。2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(t转载 2018-03-21 09:38:35 · 249 阅读 · 0 评论 -
java实现二叉树的非递归遍历与解析
先序遍历根据先序遍历的访问顺序,先访问根节点,然后再访问左子树和右子树。对于树中的任意一个节点,都可以看作是一个根节点(也可以看成是一个树),因此可以直接访问根节点,访问完根节点,如果它的左子树不为空,用相同的方法访问它的左子树,直到左子树为空,再访问它的右子树。对于树中的任意一个节点 p:(1)访问 p,并将节点入栈;(2)判断节点p的左孩子是否为空,若不为空,则将p的左孩子置为当前的结点p;(...转载 2018-03-20 17:05:38 · 222 阅读 · 0 评论 -
深入理解Java之线程池
转自:http://www.importnew.com/19011.html在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小。以下是本文的目录大纲:一.Java中的ThreadPoolExecutor类二....转载 2018-03-24 11:26:03 · 126 阅读 · 0 评论 -
Java虚拟机类加载机制
原文出处: 朱小厮看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎么加载,博主有很长一段时间也是这么认为的。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。闲话不多说,老规矩,先来一段代码吊吊胃口。public class SSClass{ static { System.out.println("SSClas...转载 2018-03-06 16:59:34 · 118 阅读 · 0 评论 -
线程间通信的几种方式
线程间的通信方式①同步这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。参考示例:public class MyObject { synchronized public void methodA() { //do something.... } synchronized public void methodB() {...转载 2018-03-06 11:21:39 · 45356 阅读 · 1 评论 -
图形推理的50大规律
1.大小变化2.方向旋转3.笔画增减(数字,线条数)4.图形求同5.相同部份去掉6.图形叠加(简单叠加,合并叠加,去同叠加)7.图形组合变化(如:首尾两个图形中都包含中间图形)8.对应位置阴影变化(两图相同或不同则第三图对应位置变阴影或变空白)9.顺时针或逆时针旋转10.总笔画成等差数列11.由内向外逐步包含12.相同部件,上下,左右组合13.类似组合(如平行,图形个数一样等)14.横竖线条之比有...转载 2018-03-22 21:49:39 · 11288 阅读 · 0 评论 -
HashMap、TreeMap、HashTable、Properties、EnumMap。
Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的有:HashMap、TreeMap、HashTable、Properties、EnumMap。Map主要...原创 2018-03-12 10:15:36 · 439 阅读 · 0 评论 -
HttpServlet容器响应Web客户请求
HttpServlet容器响应Web客户请求流程如下:1)Web客户向Servlet容器发出Http请求;2)Servlet容器解析Web客户的Http请求;3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;4)Servlet容器创建一个HttpResponse对象;5)Servlet容器调用HttpServle原创 2018-03-12 09:01:44 · 164 阅读 · 0 评论 -
红黑树
介绍红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。虽然我们希望一个所有查找都能在~lgN次比较内结束,但是这样在动态插入中保持树的完美平衡代价太高,所以,我们稍微放松逛一下限制,希望找到一个能在对数时间内完成查找的数据结构。这个时候,红黑树站了出来。 阅读以下需要了解普通二叉树的插入以及删除操作。 红黑树是在普通二叉树上,对没个节点添加一个颜色属性形成的,同时整个红黑二叉树转载 2018-03-09 09:32:12 · 154 阅读 · 0 评论 -
java中不使用比较运算符,求两个数的最小值与最大值
通常来说,求两个数的最大值与最小值,最常用的方法是比较大小。下面给出一种不需要比较大小就可以求出两个数中的最大值与最小值的方法,该方法用到了一种巧妙的数学方法。即:最大值:Max(a,b)=(a+b+|a-b|)/2,最小值:Min(a,b)=(a+b-|a-b|)/2当然,这种方法存在一个问题,即当a与b的值非常大时,会出现数据溢出的情况,解决办法原创 2018-03-14 20:18:51 · 8301 阅读 · 0 评论 -
java中消除嵌套的括号
问题描述:给定一个如下格式的字符串 (1,(2,3),(4,(5,6),7)),括号内的元素可以是数字,也可以是另一个括号,实现一个算法以消除嵌套的括号,例如,把上面的表达式变成 (1,2,3,4,5,6,7),若表达式有误,则报错。从问题描述可以看出,这道题要求实现两个功能:1、判断表达式是否正确;2、消除表达式中嵌套的括号。对于判原创 2018-03-14 17:51:22 · 2209 阅读 · 0 评论 -
HashSet 与TreeSet和LinkedHashSet的区别
Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只有两个对象用equals方法比较返回True,Set就不会接受这两个对象。HashSet与TreeSet都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实转载 2018-03-07 22:21:51 · 197 阅读 · 0 评论 -
java中ArrayList、Vector、LinkedList三者的异同点
一、ArrayListpublic class ArrayList<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, SerializableArrayList是一个可以处理变长数组的类型,这里不局限于数组,ArrayList是一个泛型,可以存放任意类型的对象。顾名思义...原创 2018-03-07 21:36:26 · 178 阅读 · 0 评论 -
Maven常用命令
一,Maven常用命令:1. 创建Maven的普通Java项目:mvn archetype:create -DgroupId=packageName -DartifactId=projectName2. 创建Maven的Web项目:mvn archetype:create -DgroupId=packageName -Dartif转载 2018-03-07 17:49:25 · 113 阅读 · 0 评论 -
Linux常用命令
转:http://blog.csdn.net/xiaoguaihai/article/details/87059921、显示日期的指令: date2、显示日历的指令:cal3、简单好用的计算器:bc怎么10/100会变成0呢?这是因为bc预设仅输出整数,如果要输出小数点下位数,那么就必须要执行 scale=number ,那个number就是小数点位数,例如:4、重要的几个热键[Tab],[ctr...转载 2018-03-07 17:29:50 · 143 阅读 · 1 评论 -
linux下文件的复制、移动与shanc
linux下文件的复制、移动与删除命令为:cp, mv, rm一、文件复制命令cp命令格式:cp[-adfilprsu] 源文件(source)目标文件(destination)cp[option] source1 source2 source3 ... diretory参数说明:-a:是指archive的元素,也就是复制所有的目录-d:若源文件为连接文件(link转载 2018-03-07 17:28:05 · 1409 阅读 · 0 评论 -
java GC算法 垃圾收集器
概述垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的....转载 2018-03-07 16:04:34 · 125 阅读 · 0 评论 -
输出字符串的所有组合的java实现
问题描述:假设字符串中的所有字符不重复,如何输出字符串的所有组合,例如,输入字符串为“abc”,则输出a、b、c、ab、ac、bc、abc,共7种组合。根据题意,如果字符串中有n个字符,根据排列组合的性质,此时一共需要输出2^n-1种组合。最容易想到的方式是递归,遍历字符串,每个字符串只能取或不取。若取该字符,就把它放到结果字符串中,遍历完毕后,输出结果字符串。程序代码为:public class...原创 2018-03-15 17:30:02 · 3544 阅读 · 0 评论 -
Java实现:按要求打印数组的排列情况
问题描述:针对1、2、2、3、4、5 这6个数字,写一个函数,打印出所有不同的排列,例如512234、215432等,要求“4”不能在第三位,“3”与“5”不能相连。打印数组的排列组合方式最简单的方法就是递归,但本题有两个难点:第一,数字中存在重复数字;第二,明确规定了某些位的特性。采用常规的求解方法似乎不能完全适用了。换一种思维,把求解这6个数字的排列组合转换为大家熟悉的图的遍历问题,解答起来就...原创 2018-03-15 21:02:22 · 1344 阅读 · 0 评论 -
合唱团--java实现
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-...原创 2018-03-11 22:17:22 · 1219 阅读 · 0 评论 -
树、森林与二叉树的转换
树或森林与二叉树之间有一个自然的一一对应关系。任何一个森林或一棵树可惟一地对应到一棵二叉树;反之,任何一棵二叉树也能惟一地对应到一个森林或一棵树。1.树、森林到二叉树的转换(1)将树转换为二叉树 树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就能将树转换成相应的二叉树: ①在所有兄弟结点之间加一连线; ②对每个结点,除了保留与其长子的连线外,去掉该...转载 2018-03-17 09:52:04 · 491 阅读 · 0 评论 -
java中字符串的内存分配
public class SendValue{ public String str="6"; public static void main(String[] args) { SendValue sv=new SendValue(); sv.change(sv.str); System.out.println(sv.str); ...原创 2018-03-11 12:08:32 · 649 阅读 · 0 评论 -
Java内存分配之堆、栈和常量池
Java内存分配主要包括以下几个区域:1. 寄存器:我们在程序中无法控制2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中3. 堆:存放用new产生的数据4. 静态域:存放在对象中用static定义的静态成员5. 常量池:存放常量6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间**************转载 2018-03-11 12:00:13 · 108 阅读 · 0 评论 -
Java实现八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间...原创 2018-03-10 22:16:30 · 236 阅读 · 0 评论 -
java中的输入操作
Java中输入一般是通过Scanner类来实现的:具体步骤如下:(1)创建Scanner对象,接受从控制台输入Scanner input=new Scanner(System.in);(2) 接受String类型String str=new input.next();(3)接受int类型int n=input.nextInt();(4)输出结果System.out.println(str);Sys...原创 2018-03-10 11:36:20 · 164460 阅读 · 6 评论 -
java中Scanner用法
一、Scanner类简介 Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类...原创 2018-03-10 11:16:12 · 381 阅读 · 0 评论