- 博客(22)
- 资源 (10)
- 收藏
- 关注
原创 算法题:两个大数相加(java)
题目: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。输入的两个大数可能正可能负分析: 首先需要判断两个大数的正负号,使用字符串来模拟小学数学中的两个数的加减法。代码:/** * 两个大数相加,输入的两个大数的正负号不确定 */public class Solution { public static void main...
2018-04-29 18:11:55 3368
原创 redis基础知识
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下: 1、字符串类型 2、散列类型 3、列表类型 4、集合类型 5、有序集合类型。redis的特点: 1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2、Redi...
2018-04-26 23:43:24 252
原创 redis集群的分区实现原理
绪论 Redis Cluster本身提供了自动将数据分散到Redis Cluster中不同节点的能力,分区实现的关键点问题包括:如何将数据自动地分散到不同的节点,使不同节点的存储数据相对均匀;如何保证客户端能够访问到正确的节点和数据;如何保证重新分片的过程中不影响正常服务。这篇文章通过了解这些问题来认识Redis Cluster分区实现原理。认识Redis Cluster Redis Cl...
2018-04-26 21:49:18 626
原创 初步了解redis集群
集群原理1、redis-cluster架构图: 架构细节: (1)所有redis节点彼此互联(通过PING-PONG机制),内部使用二进制协议优化传输速度和带宽。 (2)节点fail是通过集群中超过半数的节点检测失效时才生效。 (3)客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群中的所有节点,连接集群中任何一个可用节点即可。 (4)redis-clust...
2018-04-26 20:58:11 287
原创 HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂很大。但数组的按照二分查找时间复杂度小,为O(logn);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,...
2018-04-23 21:47:52 183
原创 java线程中join方法的简单讲解
一、作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并发执行变为串行执行。具体看代码:public class Test { public static void main(String[] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoinTes...
2018-04-11 22:17:16 374
原创 浅谈Java中Volatile关键字
很早就接触了volatile,但是并没有特别深入的去研究它,只有一个朦胧的概念,就是觉得用它来解决可见性问题,但可见性又是什么呢?最近经过查阅各种资料,并结合自己的思考和实践,对volatile有了比较深刻的认识,在此总结并分享给大家。可见性如何理解可见性,还是来看个会出现死循环的例子: 这是为什么呢?先来看看java的内存模型,如下图: java...
2018-04-02 11:34:02 2202
原创 剑指offer第二版面试题17:打印1到最大的n位数(java)
题目描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999跳进面试官的陷阱: 这个题目看起来很简单。我们看到这个问题后,最容易想到的办法是求出最大的n位数,然后用一个循环从1开始逐个打印。于是我们很容易写出下面的代码。public static void print1ToMaxOfNDigits(int n) { ...
2018-04-30 17:17:28 775
原创 剑指offer第二版面试题16:数值的整数次方(java)
题目描述: 实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。自以为很简单的解法: 由于不需要考虑大数问题,这道题看起来很简单,可能不少应聘者在看到题目30秒后就能写出如下的代码:public static double power(double base, int exp...
2018-04-30 16:12:29 495
原创 剑指offer第二版面试题15:二进制中1的个数(java)
题目描述: 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2。可能引起死循环的解法: 这是一道很基本的考察二进制和位运算的面试题。题目不是很难,面试官提出问题之后,我们很快就可以形成一个基本的思路:先判断整数二进制表示中最右边一位是不是1。接着把输入的整数右移一位,此时原来处于(从右边数起)第二位被移到最后...
2018-04-30 12:02:22 539
原创 剑指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、求一个问题的最优解; 2、整体的问题的最优解是依赖各个子问题的...
2018-04-30 10:22:33 1199
原创 剑指offer第二版面试题13:机器人的运动范围(java)
题目描述: 地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左,向右,向上,向下移动一格,但不能进入行坐标和列坐标的位数之和大于k的格子。例如:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18;但它不能进入方格(35,38),因为3 + 5+3+8 = 19.请问该机器人最多能到达多少个格子?分析: 和面试题13类似,这个方格也可...
2018-04-28 23:49:53 591
原创 剑指offer第二版面试题12:矩阵中的路径(java)
问题描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b...
2018-04-28 21:51:27 650 3
原创 剑指offer第二版面试题11:旋转数组的最小数字(java)
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路: 1、暴力解法,从头到尾遍历一次,我们就能找出最小的元素,复杂度为O(n),但是没有利用输入的旋转数组的特性,肯定达不到面试官的要求。 2、二分查找,这里的数...
2018-04-28 21:02:08 595
原创 剑指offer第二版面试题10:斐波那契数列(java)
题目一:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:1、效率很低效的解法,挑剔的面试官不会喜欢很多C语言的教科书在讲述递归函数的时候,都会拿Fibonacci作为例子,因此很多的应聘者对这道题的递归解法都很熟悉。下面是实现代码我们教科书上反复用这个问题来讲解递归的函数,并不能说明递归的解法最适合这道题目。面试官会提示我们上述递归的解法有很严重的效率问题要求我...
2018-04-24 20:50:00 609 1
原创 剑指offer第二版面试题9:用两个栈实现队列(java)
题目描述: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。分析: 我们通过一个具体的例子来分析该队列插入和删除元素的过程。首先插入一个元素a,不妨先把它插入到stack1,此时stack1 中的元素有{a},stack2为空。再压入两个元素b和c,还是插入到stack1中,此时st...
2018-04-17 22:20:37 670
原创 剑指offer第二版面试题8:二叉树的下一个节点(java)
题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析: 根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况: 1、有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点;...
2018-04-17 21:50:52 783
原创 剑指offer第二版面试题7:重建二叉树(java)
题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。例如输入的前序遍历序列为{1,2,4,7,3,5,6,8}和中序遍历为{4,7,2,1,5,3,6,8},则重建出二叉树并输出它的头结点。在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历中,根节点的值在序列的中间,左子树的结点的值位于根节点的值的...
2018-04-17 21:28:18 2817 2
原创 剑指offer第二版面试题6:从尾到头打印链表(java)
题目描述: 输入一个链表,从尾到头打印链表每个节点的值。返回新链表。分析: 可以借助栈也可以使用递归代码如下:/** * 从尾到头打印列表 */public class PrintListReverse { public static void main(String[] args) { ListNode node1 = new ListNode...
2018-04-17 20:43:11 790
原创 剑指offer第二版面试题5:替换空格(java)
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy”,则输出”We%20are%20happy”.原因:在网络编程中,如果URL参数中含有特殊字符,如:空格、“#”等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器识别的字符。转换规则是在“%”后面跟上ASCII码的两位十六进制的表示。比如:空格的ASCII码是32,即十六...
2018-04-17 19:49:17 1035 1
原创 剑指offer第二版面试题4:二维数组中的查找(java)
问题描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1 2 8 92 4 9 124 7 10 136 8 11 15分析: 首先我们选取数组右上角的数字9.由于9大于7,并且9还是第4列的第一个(也是最小的)数字,因此7...
2018-04-17 19:34:12 815
原创 剑指offer第二版面试题3:数组中重复的数字(java)
题目一: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复的次数。请找出数组中任意一个重复的数字。例如如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。 分析: 解决这个问题的一个简单的方法是先把输入的数组排序。从排序的数组中找出重复的数字是件容易的事情,只需要从头到尾扫描排...
2018-04-17 17:35:47 2820
黑马程序员19期java学院全部培训资料和22套java web项目
2018-01-07
【MyEclipse】配置代码格式化模版
2017-10-15
新闻管理系统model2模式
2017-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人