自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

KesarChen的博客

个人博客地址:http://claymantwinkle.github.io/

  • 博客(57)
  • 资源 (2)
  • 收藏
  • 关注

原创 腾讯Android面经

秋招收官最后一战。腾讯一面(电话):自我介绍项目,平时怎么学习?设计模式 (1)知道哪些设计模式?设计模式在Android、Java中是怎么应用的,每个都说一下? (2)InputStream和OutStream用了什么设计模式?Android部分 (1)讲下Android中多线程的实现与应用场景。 (2)Android内存泄露的场景有哪些? (3)Sqlite了解多少?可以并发

2016-11-25 10:59:47 6576 2

原创 秋招百度Android面经

春招的时候错过了百度,秋招的时候总算抓住机会。 百度笔试:在线笔试(赛码网)的时间是在晚上7点,我实习下班是晚上6点,当时下班后我飞快地赶回宿舍开电脑,连晚饭都顾不上。实践证明,饿的时候头脑是最清醒的。拿下算法题后,笔试应该可以通过。

2016-11-23 22:36:16 2037

原创 eclipse与idea中classpath配置路径不同导致迁移项目时的FileNotFoundException问题

我这次遇到的问题是:我在迁移spring项目时,在eclipse中配置了一个resources目录,在eclipse中是在classpath下的,而搬到idea后,变成在classpath外部了,然后因为这个问题导致我的项目在idea中一直无法运行。 然后我的解决办法是这么做的:1.我要将这个resources目录移动到classpath目录下2.打开Project Structure3.Mod

2016-04-19 20:22:48 12590

原创 [Android学习]Android中MVP模式初探1

前言: 1. 初识MVP模式时,看到它缺点是需要增加一倍的类的维护量。所以就暂时没用它。但是,当一个类的代码行数达到一定的量(1000行以上),这时候维护类变得好麻烦,主要是功能变得多了,方法数量也变多了。这个时候真的是需要给类“瘦瘦身”。 2. 这时候重新看了MVP模式,确实发现了“宝”。一、简单定义 Model层:将功能逻辑等封装才model层中,其中包括了Data的交互(数据

2016-03-28 21:49:30 1830

原创 [面经]阿里游戏一面的算法题

前言:两天前参加阿里游戏的面试,一面时出了一道面试题。那时我看楞了,好像没做过这种题型,看起来很容易又很难。很容易是,使用O(N^2)就可以解决,难得是,优化时间复杂度。 题目:字符串删除字符(字符可能会有重复,要一起删掉)思路一(反正面试我没这么写,你们随便看看) 一开始看到题目,思路就遍历字符串,一个个字符比较,然后删除它。 (1) 遍历数组,找到目标字符;

2016-03-21 09:28:25 6080 1

原创 [面经]CVTE技术二面一道算法题

题目描述: 1+11+111+…+1111111111=sum,最后一个二进制数是n个1。计算二进制数的累加后sum的值。 思路解析: 1. 首先,这明显是个大数问题。所以建议所有数都用字符串来表示或者是int数组来表示。这里我们用字符串来表示。 2. 使用字符串表示二进制数的话,需要实现两个二进制数字符串形式的加法运算。(关键) 3. 需要有制造这么多个1的字符串数组的方法

2016-03-17 09:46:39 3473 3

原创 [java学习]java容器源码初探(1)

一、动态数组ArrayList 在我们开发者眼中,这就是一个“动态数组”,可以“动态”地调整数组的大小,虽然说数组从定义了长度后,就不能改变大小。 实现“动态”调整的基本原理就是:按照某个调整策略,重新创建一个调整后一样大小的数组,然后将原来的数组赋值回去。 下面我们来解析一下几个与数组不一样的方法。看看ArrayList中主要的几个字段(源码剖析): // 默认的初始数组大

2016-03-15 18:44:26 3261

原创 [面经]CVTE的两道笔试编程题

晚上状态有点不好,然后就仓促参加笔试了。前面很多道选择题,真是坑,都是多选(混杂了多道单选)。下面就说说笔试题的两道编程题吧。其实我做的时候也是挺紧张的,随意符合题意的做完提交,也没加以优化,其实如果时间允许,我也是蛮想优化下的,不过这 场笔试不是看你优化得有多好,而是看你做对了没。第一道题:字符数组的循环右移问题 题目要求:将N个字符的数组,循环右移K位。时间复杂度O(N)。 现场思路

2016-03-05 22:49:15 10475 9

原创 [Android学习]ListView显示多种item

在平常使用ListView的时候,通常我们使用的item的layout都是同一个。当需要有多个不同的item的layout时,有两中处理的办法。 第一种方法: 重写getView()方法@Overridepublic View getView(int position, View convertView, ViewGroup parent){ int type=listDatas.

2016-03-05 10:11:47 5676 4

原创 [AndroidAnnotations框架]AndroidAnnotations的配置

一、在AndroidStudio下配置androidannotations首先,准备好你的project。AndroidStudio下的androidannotations配置是比较容易的,只需要配置两个build.gradle就可以。配置build.gradle ( 1 ) 我们先配置preject目录下的build.gradle 在buildscript> dependencies>下

2016-03-04 13:20:59 4328

原创 [读书笔记]Java类加载器

一、类与类加载器类加载器除了在类加载阶段的作用外,还确定了对于一个类,都需要由加载它的类加载器和这个类本身一同确定其在Java虚拟机中的唯一性。通俗一点来讲,要判断两个类是否“相等”,前提是这两个类必须被同一个类加载器加载,否则这个两个类不“相等”。 这里指的“相等”,包括类的Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法、instan

2016-02-29 22:04:34 4274

原创 [读书笔记]Java类加载过程

一. 类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,有以下(如图)的生命周期: 以上“加载->验证->准备->解析->初始化”称为类的加载过程。 Java虚拟机规范中没有对什么时候需要开始类加载的第一阶段进行强制约束,而是交给了虚拟机根据具体实现来自由把握。 但是对于初始化阶段,虚拟机有以下5种必须对类立即进行“初始化”的情况: (1)遇到new、getstatic、put

2016-02-28 23:50:18 4860

原创 [读书笔记]JVM的垃圾收集算法

1.标记-清除算法(1)算法思想:第一步,标记好所有需要回收的对象;第二步,清除被标记的对象。 (2)缺点:时间上,效率不高,无论是标记还是清除操作;空间上,会产生大量不连续的内存碎片,使得占用大内存的对象找不到足够的连续内存而进一步又提前触发一次GC。 标记-清除算法执行过程如下图所示: 2.复制算法(1)算法思想:内存区分成两部分大小相等的区域。一半作为使用区,一半作为保留区。申请内存时,

2016-02-28 00:16:29 6497

原创 [linux学习]centos下mysql的简单使用教程

今天用学生认证买了一个腾讯云服务器,在云服务器上装了centos6.6,拿来玩玩。翻开以前用linux时记下的笔记,有很多重复,有点乱,拿来整理一下。1. 使用yum安装mysql// 安装前先update一下sudo yum update// 查看有没有mysql的可下载版本yum list | grep mysql// 下载安装~yum install -y mysql-server

2016-02-26 10:29:20 9683

原创 A星算法(Java实现)

一、适用场景在一张地图中,绘制从起点移动到终点的最优路径,地图中会有障碍物,必须绕开障碍物。二、算法思路1. 回溯法得到路径(如果有路径)采用“结点与结点的父节点”的关系从最终结点回溯到起点,得到路径。2. 路径代价的估算:F = G+HA星算法的代价计算使用了被称作是启发式的代价函数。 先说明一下各符号意义:G表示的是 * 从起点到当前结点的实际路径代价 * (为啥叫实际?就是已经走过了,边走边

2016-02-25 12:54:27 18674 15

原创 [算法学习]8皇后问题

问题描述: 国际象棋的“8皇后问题”:在8x8的国际象棋上摆放8个皇后,使其不能互相攻击,即8个皇后中任意两个不得处在同一行、同一列或同一对角线上。共有多少种符合条件的摆法? 解法与分析: 1. 首先是不能同一列同一行,那么每个皇后必须各独占一行一列,使用二维数组来描述就有点浪费空间了。这里我们使用一个8个元素的一维数组来表示每个皇后的每一行。 2. 那么独占一列的情况,描述起来

2016-02-19 15:21:16 8876 1

原创 [算法学习]Java实现字符序列全组合

问题描述: 假设数组中字符无重复,输入一个字符数组,打印出字符的全部组合。例如:输入{a,b,c}输出a、b、c、ab、ac、bc、abc 解法与分析: 不使用辅助空间。输入一组n个字符的数组,将打印出C(1,n)+…+C(n,n)=2^n个组合。 1.按照从1到n作为一个循环,每次输出C(i,n)个组合。这样,我们只需要处理如何输出一个C(i,n)就可以解决问题。 2.处理C

2016-02-18 14:00:31 8724

原创 [算法学习]整数序列的奇偶分类

问题描述: 输入一组序列,奇数在前,偶数在后,输出整理后的序列。 解法与分析: 能马上想到用二分法,就很快能解决问题。参考代码如下/** * 解法:使用二分法 * @param nums */public static void reorderOddEven(int[] nums){ if(nums==null) { return; }

2016-02-18 13:59:51 8070

原创 [算法学习]顺时针打印矩阵

问题描述: 顺时针打印矩阵 例如: { {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 解法与分析: 考虑几个特殊情况:行1列n,行n列1,行1列1。考虑到这几个后其实就不难了。参考代码如下

2016-02-18 13:59:02 7098

原创 [算法学习]数组的旋转

问题描述: 返回将一维数组向右旋转k个位置的结果。 比如,一维数组{1,2,3,4,5},k=2时,返回结果是{4,5,1,2,3}。 要求常数级空间复杂度,允许修改原有数组。 解法与分析: 使用三旋转:全部旋转一次,前面0到k-1旋转一次,后面k到数组最后一个数旋转一次,就可以解决问题。参考代码如下public static int[] rotateK(int[] datas,

2016-02-18 13:58:13 7378

原创 [算法学习]二维数组的查找

问题描述: 二维数组中的查找。在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否包含该整数。 例如: { {1,2,3,4} {2,4,6,7} {4,5,7,8} {6,7,8,9} } 解法与分析: 可以使用二分法来查找。 1.

2016-02-18 13:57:28 8460

原创 [算法学习]复杂链表的复制

问题描述: 复制一个复杂链表。 在复杂链表中,每个结点除了有一个指向下一个结点的next指针外,还有一个 sibing指针 指向链表中任意结点或者NULL。解法一:“爆破” 解法分析: 1. 遍历第一遍数组,把复制链的next和各结点值复制好。需要时间O(n) 2. 第二遍遍历,二重for循环根据原链表,将复制链的slibing指针连接好。需要时间O(n^2) 3. 需要时

2016-02-18 13:56:50 7031

原创 [算法学习]求链表的中间结点

问题描述: 返回链表的中间结点(如果是两个则返回两个) 解法与分析: 用两个指针移动的方法来解决问题。一个指针每次移动1个结点,另外一个指针移动2个结点。参考代码如下static class ListNode{ int val; ListNode next; public ListNode(int val) { this.val = va

2016-02-18 13:56:00 7577

原创 [算法学习]求出链表中倒数第n个节点

问题描述: 求出链表中倒数第n个节点。例如:1,2,3,4,5,倒数第2个是4 解法与分析: 用两个指针的方法。 1. 第一个指针起始位置在0位置,第二个指针起始位置在n-1位置。 2. 两个指针同时移动,每次移动1个结点。 3. 当第二个指针移动到最后一个节点时,第一个指针所指结点就是倒数第n个结点。参考代码如下static class ListNode{

2016-02-18 13:55:19 8723

原创 [算法学习]判断链表是否是环结构

问题描述: 判断链表是否是环结构。 解法与分析: 用两个指针的方法判断。 1. 第一个指针在第一个结点,第二个指针在第二个结点处; 2. 两个指针同时移动,第一个指针每次移动一个结点,第二个指针每次移动两个结点; 3. 当第二个指针和第一个指针指向的结点是同一个时,链表有环。参考代码如下static class ListNode{ int val; L

2016-02-18 13:54:34 7459

原创 [算法学习]合并两个排序的链表

问题描述: 合并两个排序的链表。解法一:用递归 解法: 递归比较结点大小:每次递归,取出两个链表的头结点来比较,比较小的结点加入新链表中。参考代码如下/** * 用递归 * @param head1 * @param head2 * @return */public static ListNode merge(ListNode head1, ListNode head2){

2016-02-18 13:53:35 7346 1

原创 [算法学习]反转链表

问题描述: 输入一条链表,将链表反转后返回。解法一:用递归 解法: 由于反转后头结点会成为尾结点,尾结点会成会头结点。所以从头结点开始反转前后结点关系。比较简单,所以这里直接贴出代码。参考代码如下/** * 递归 * @param head * @return */public static ListNode reverseList1(ListNode head){ if

2016-02-18 13:52:54 7338

原创 [算法学习]计算出二进制数中1的个数

问题描述: 计算出二进制数中1的个数。解法一:循环计数 解法与分析: 使用一个数1来“与”二进制数中每一位,若值为1则1的个数加一。参考代码如下/** * 通过flag左移做一个循环来与num的每一位,若与计算的结果不为0,则1的个数++ * @param num * @return */public static int calc2(int num){ int coun

2016-02-18 13:52:00 7875

原创 [算法学习]栈中的最小值

问题描述: 实现栈的pop、push、 min (得到栈中最小值)方法。 解法与分析: 1. 由于每次压栈和出栈都可能会改变栈中的最小值,所以,我们增加一个存放最小值的栈。 2. 当出栈操作时,最小值的栈也出栈;(当然,必须判断栈是否为空) 3. 当压栈操作时,比较压栈元素值和最小栈的栈顶元素的大小,若比较小,则将它压入栈中,若不是,则将最小栈的栈顶元素重复压栈。(当然

2016-02-18 13:51:19 8359

原创 [算法学习]栈的出栈序列

问题描述: 输入数字不重复的两组整数序列:压栈的序列A,出栈的序列B,验证AB是否为同一栈的序列。 解法与分析: 1. 使用两个指针pA,pB分别在两个序列A,B上遍历。 2. 做个这样的判断,首先判断两个指针所指元素是否相等,若相等,则两个指针同时推进;若不相等,取出栈顶元素作比较;若与栈顶元素不相等,则序列A的元素入栈,pA指针向前推进,若与栈顶元素相等,则出栈,pB指针

2016-02-18 13:50:39 9634

原创 [算法学习]二叉搜索树转双向链表

问题描述: 将一棵二叉搜索树转成一条排序好的双向链表。要求不能创建新结点。 解法与分析: 1. 由于左子树<根结点<右子树,所以双向链表的头结点是二叉搜索树左子树中的最后一个左结点,双向链表的头结点是二叉搜索树右子树中的最后一个右结点,根结点则是链表的中间结点。 2. 将树结点中指向左孩子的指针作为双向链表中的前驱指针,指向右孩子的指针作为双向链表指向后继结点的指针。

2016-02-18 13:49:50 7277

原创 [算法学习]打印树的路径

问题描述: 输入一个整数sum和一棵二叉树,打印出二叉树中结点和为sum的所有路径。 (路径:从根结点往下一直到叶结点形成的一条路径。) 解法与分析: 1. 需要从树上的根结点遍历到叶子结点,其中需要累加经过结点的值。 2. 当累加到叶子结点时,比较累加结点值和sum的值,如果相等,打印出路径;如果不相等,返回到上一层,寻找其他叶子结点。 3. 需要保存结点路径,还可以

2016-02-18 13:48:59 8598

原创 [算法学习]树的子结构

问题描述: 判断树A是否是树B的子结构。 解法与分析: 使用递归的方式很容易解决。先进行根结点比较,相等的话,递归左右子树。参考代码如下public static boolean isIncludeTree(TreeNode parent, TreeNode child){ boolean result = false; if (parent == null || c

2016-02-18 13:47:26 6942

原创 [算法学习]树的镜像

问题描述: 输出树的镜像。 解法与分析: 根结点不变,左右子树交换。按照这一点进行递归,就可以解决问题。参考代码如下public static TreeNode mirror(TreeNode root){ if(root==null) return null; TreeNode left=root.left; TreeNode right=root.right

2016-02-18 13:46:15 6420

原创 [算法学习]树的广度遍历

问题描述: 从上层向下层遍历,从左向右打印出一棵树 。 解法与分析: 广度遍历,按照从左向右的方式,我们可以使用队列来保存每一层的结点,每次结点出队,将出队结点的子结点入队,直至队列为空,就可以打印出符合要求的树遍历。参考代码如下/** * 从上层向下层遍历,从左向右 * @param root */public static void printTreeFromTopTOB

2016-02-18 13:35:16 6415

原创 [算法学习]后缀表达式转二叉树

问题描述: 输入后缀表达式,输出后缀表达式的二叉树。 解法与分析: 1. 根据后缀表达式的特点,我们可以知道,只要是运算符的就都是根结点。 2. 我们这里需要使用一个栈来保存字符。遍历后缀表达式,每当遇到是非运算符的字符,就将它入栈,当遇到是运算符,就将栈中前两个结点出栈,和运算符组成一棵子树,然后入栈。遍历完成后,栈中剩下的唯一的一个结点就是该后缀表达式的二叉树的根结点。

2016-02-18 13:33:33 13271 1

原创 [算法学习]两个栈实现一个队列

问题描述: 用两个栈实现一个队列,实现两个方法:入队appendTail,出队deleteHead 分析: 第一眼就能想到两个做法, (1) 入队麻烦出队容易: 声明两个栈,一个是存数据用的栈(dataStack),一个是辅助用的栈(tempStack)。 入队操作时,先将dataStack中的所有元素出栈压入tempStack中,然后将要入队的元素压入tem

2016-02-03 14:27:05 5279

原创 [算法学习]输入遍历重建二叉树

问题描述: 假设二叉树中的值都不重复, (1) 输入前序遍历和中序遍历的结果,输出该二叉树; (2) 输入中序遍历和后序遍历的结果,输出该二叉树。 分析: (1) 由前序确定根节点,中序确定左右子树范围,然后用递归重复这段逻辑。根据前序遍历可知根节点在第一个的位置,根据这个根节点在中序遍历中的位置,左边是左子树,右边是右子树,然后根据中序遍历的左右子树范围判断出前序

2016-02-03 14:25:31 5695

原创 [算法学习]斐波那契数计算

问题描述: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 分析: 这里有两种解法,一种是用递归,一种使用循环。用递归的解法看起来很很简单,只需几行的代码就可以搞定,但是却隐藏着巨大的空间消耗和时间 消耗 。一种使用循环来做,写起来有点难看,至少没递归写起来好看,但是却比递归效率更高,几乎没有内存消耗。代码思路(1). 递归。代码如下(时

2016-02-03 14:24:07 6547

原创 [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)

问题描述: 设计一个类,包含如下两个成员函数: Save(int input) 插入一个整数到一个整数集合里。 Test(int target) 检查是否存在两个数和为输入值。如果存在着两个数,则返回true,否则返回false 允许整数集合中存在相同值的元素 分析: 与[算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)不同,这里需要算出的是存不存

2016-01-28 14:07:59 5994

QQ截图绿色版

QQ截图绿色版

2017-07-08

Android Studio kotlin最新插件 kotlin-plugin-1.1.3-release-Studio2.3-2

Android Studio kotlin最新插件 kotlin-plugin-1.1.3-release-Studio2.3-2

2017-07-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除