java 面试
文章平均质量分 79
云原生手记
欢迎大家关注我的公众号“云原生手记”,将定期更新云计算技术文章
展开
-
一个整数二进制表示中1的个数 java实现
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题目解析:最直观的解法是先判断整数二进制表示中最右边以为是不是1.接着把整数右移一位(这边用右移不用除以2,是因为除法运算效率比移位运算要低得多),这样每次移动一位,直到整数为0.但是这样子会有一个问题,当输入是一个负整数,由于负整数最高位是1,右移一位后必须保持最高位还是1,这样一直死循环下去,因为移位后的数永远不会为0,原创 2017-05-23 09:37:43 · 3260 阅读 · 3 评论 -
2017ebay在线编程题:判断死锁
题目描述:给你一个队列,队列长度是L,你可以对这个队列循环进行读操作和写操作,写操作(写入W个字符)时,如果队列中空余长度大于写的长度,那么可写,否则需要先进行读操作(读R个字符),等写空间大于W时,才能进行写操作;不可读:队列中的可读字符不超过R个,则不可读不可写:队列中的可写长度不超过W个,则不可写在这个读写过程中,可能出现死锁现象:例如,在写操作时空余长度小于W即不可写,但是原创 2017-10-24 22:13:48 · 727 阅读 · 0 评论 -
对称的二叉树 java实现
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的,如果一棵二叉树和他的镜像是一样的,那么它是对称的;解题思路:首先 理解镜像的概念,进行就是一棵二叉树左右节点反转过后形成的二叉树和原来的二叉树是一样的。这道题目中判断条件是使用和元二叉树的镜像相同,那么最low的方法是对原二叉树进行重构,重构后的二叉树和原二叉树进行比较,相同即是对称,不同就是不对称喽。那么这种方法需要额外空间的,我原创 2017-11-10 17:41:11 · 1413 阅读 · 1 评论 -
把字符串转换成整数 java实现
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+2147483647 1a33输出2147483647 0原创 2017-11-10 18:47:46 · 3112 阅读 · 0 评论 -
java并发集合有哪些
java并发集合 数据结构(Data Structure)是编程中的基本元素,几乎每个程序都使用了一种或多种数据结构来存储和管理数据。java API提供了包含接口、类和算法的java集合框架,它实现了可用在程序中的大量数据结构。 当需要在并发程序中使用数据集合时,必须要谨慎地选择相应的实现方式。大多数集合类并不能直接用于并发应用,因为他们没有对本身数据的并发访问进行原创 2017-11-13 10:39:45 · 4134 阅读 · 0 评论 -
消费者生产者模式(2)——用java阻塞队列实现
生产者——消费者模式有三个阶段的编程: 1.使用synchronized,wait,notify(这在我博客中已经有实现了,可以找找看看) 2.使用阻塞队列LinkedBlockingQueue(这是本小节的重点) 3.使用非阻塞式的内存结构如ConcurrentLinkedQueue(以后补充) 本小节所讨论的生产者消费者模式是通过一个容器来解决的。原创 2017-11-13 11:26:10 · 1054 阅读 · 0 评论 -
剑指OFFER——判断一棵树是否是平衡二叉树 java实现
剑指OFFER——判断一棵树是否是平衡二叉树 java实现题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。题目解析:首先要明白平衡二叉树的性质才做判断:平衡二叉树就是左子树和右子树的高度差不能超过1,且左右子树必须是平衡二叉树;解决方法1:从根节点开始,先判断左右子树的高度差是否超过1,然后接着判断左右子树是否是平衡二叉树。这边用到了递归思想。代码如下:public原创 2017-11-19 16:52:44 · 6884 阅读 · 10 评论 -
代理模式(静态代理和动态代理) JAVA
转载地址:http://blog.csdn.net/goskalrie/article/details/52458773代理模式 JAVA 代理模式的现实例子就是——中介,很贴切,它的定义:给某个对象提供一个代理,并由代理对象控制对象对原对象的引用。 代理模式包含如下角色: (1)抽象主题角色:是一个接口,该接口是对象和它的代理共用的接口。转载 2017-11-14 21:46:45 · 440 阅读 · 0 评论 -
java 常见性能优化策略分类
常见性能优化策略分类http://blog.csdn.net/zhengchao1991/article/details/53579906代码:之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全转载 2017-11-14 22:34:21 · 626 阅读 · 0 评论 -
数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路:如果你想用map的方式来查找第一个重复数字,这种想法是ok的,但是这样会付出o(n)的空间复杂度。我这主原创 2017-11-10 12:15:43 · 287 阅读 · 0 评论 -
二叉搜索树中的第K大的节点 java实现
题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。解题思路:因为这是一颗二叉搜索树,返回的第K个节点其实就是二叉树按中序遍历的第K个节点。思路一:按中序遍历顺序,将节点一个一个存在LinkedList中,存完之后,取出第k个节点就行啦,这个方法有点low啦思路二:仍然是按中序遍原创 2017-11-10 11:43:47 · 1898 阅读 · 0 评论 -
散列结构的实现
散列表的实现是一种在时间和空间上做出权衡的方式。对于数组存储,如果们没有内存限制,则可以直接将数据作为键作为数组的索引,那么所有的查询操作都只需要一次访问内存即可完成。但是当键很多的时候,需要的内存会非常大,所以这种方式不可能实现。另一方面,如果没有时间限制,我们可以对数组进行遍历查找,来查询数组里面的数据。这样会耗费比较多的时间。散列表是一种折中的方法,在这两个极端之间找到一个权衡。散列原创 2017-05-23 19:40:05 · 572 阅读 · 1 评论 -
找出数组中出现次数大于一半的数字 Java实现 剑指offer
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0解题思路:第一种最简单,进行快速排序,然后取出最中间的数字,并且用这个数字遍历一遍数组,看看该数出现次数是不是大于数组长度的一半(实现代码如下,快速排序法);原创 2017-06-03 22:34:38 · 978 阅读 · 1 评论 -
剑指offer 字符串的排列原题,java实现,组合排列去重
首先讲一下原理:求字符串的排列,可以看成两步:1、把所有可能的字符都放在第一位,具体实现:可以遍历一次字符串,从第一个字符开始与第一个字符互唤,一次遍历后所有字符都会一次出现在第一个位置。在每次循环内实现第二步。2、将剩余的字符串的所有可能的字符放到该剩余字符串的位置(即重复1)。然后进行第三步,将原先互换的字符再次互换回来,恢复原始顺序,一遍进行后续的互换。过程图如下:假设字符串char原创 2017-05-21 09:25:06 · 649 阅读 · 1 评论 -
从尾到头打印列表 java实现 剑指offer原题 java实现栈结构
题目分析:从尾到头打印列表,即输出列表上各个节点的值,首先输入是一个链表头结点,且这是一个单链表,可以看看代码中ListNode类。要知道所有节点的值必须遍历一遍链表,但是又要从后向前打印,但是链表只能从前往后遍历。要想实现:从前往后>>>>>>从后往前,这个很想栈结构的性质,先入后出,先遍历的节点最后输出。所以我们只需要建立一个栈结构即可(本题解决关键)。java中可以使用LinkedList集原创 2017-05-21 10:40:15 · 341 阅读 · 0 评论 -
查找旋转数组的最小数字 JAVA实现
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目解析这其实是一个查找问题,查找最小元素,如果单纯遍历一边数组确实也可以查找到这个最小数字原创 2017-05-22 09:20:34 · 1218 阅读 · 1 评论 -
判断数组是否是二叉搜索树的后序遍历序列 JAVA实现
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同;题目解析:二叉搜索树的特点是:根节点大于左子树所有节点,小于右子树所有节点。每棵子树都要满足这样的特点才是二叉搜索树。那我们的输入是二叉搜索树的后序遍历序列:左右根。可知输入数组的最后一个位置时这棵树的根节点。我们要做的是将左右子树划分出来原创 2017-06-02 10:54:01 · 711 阅读 · 1 评论 -
最小的K个数 java实现 剑指offer
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思想:原来的做题思路是直接快速排序法排一遍,在取出这最小的K个数,可行,但是有些排序多余了,因为这边只要找到最小的K个数,快排的话会整体排一遍,次数可能大于K次,所以这边采用最小堆排序的方法,只需要排k次即可取出最小的K个数。原创 2017-06-04 09:54:25 · 593 阅读 · 1 评论 -
JAVA中新建一个子类的执行过程
初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 以上是一般过程,首先一开始先初始化的是静态成员变量和原创 2017-10-20 15:43:03 · 5108 阅读 · 0 评论 -
数组中只出现一次的数字 JAVA
数组中只出现一次的数字——剑指OFFER原题题目描述:一个整型数组B里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。假设,数组A中只有一个数字出现一次,其余都是出现两次,我们可以用一次遍历异或解决,例如数组A{1,2,1,2,3},将这五个数字异或的结果是3,不信你可以自己试试。原理就是两个相同的数字异或结果为0,0和任意数字异或,都是该数字本身但是我们原创 2017-10-29 15:58:14 · 865 阅读 · 0 评论 -
饿了么 java开发面试经验2017
饿了么的面试官真的很nice,最后问题了平时该怎么精进代码的时候,很耐心的告诉我,真的很感激遇到这么一位面试官,不严肃,技术好,很爱笑主要问了java的基础:1、sleep()和wait()方法的区别2、类为什么要有hashcode()方法,是不是主要在集合类中都要实现hashcode方法3、equals()方法怎么实现4、两个不同的对象可能有相同的hashcode值吗5、java countdo...原创 2018-05-15 21:33:48 · 2500 阅读 · 1 评论