自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (4)
  • 收藏
  • 关注

转载 算法之大整数乘法

大数的表示方法有很多种,最易懂的而且最跟手工计算方式最接近的方式是通过字符数组来保存大数,数组的每个元素保存大数的一个十进制数字,这种方式操作比较简单,但是这种方式需要较多的额外运算,所以效率低下。另一种方式是采用链表作为存储结构,这种方式可以适应不同长度的大数,但是这种方式的存储效率很低,对本身就需要不少内存空间的大数运算来说负担很重,而且频繁的堆操作和解引用操作会大量增加开销,此外链表存储的不

2016-03-31 21:28:34 3280

原创 java异常体系结构详解

前几天在参加网易和360公司的在线考试的时候,都出了一道关于java中异常类的多项选择题。这几天翻看了相关书籍和网上一些资料,结合自己的理解与思考,将自己的一些收获记录如下:先来看看java中异常的体系结构图解:首先说明一点,java中的Exception类的子类不仅仅只包含IOException和RuntimeException这两大类,事实上Exception的子类很多很多,主

2016-03-31 11:41:23 2043

原创 TCP协议三次握手与四次挥手详解

在计算机网络的学习中TCPi协议与Http协议是我们必须掌握的内容,其中Tcp协议属于传输层,而Http协议属于应用层,本博客主要讲解Tcp协议中的三次握手与四次挥手,关于Http协议感兴趣的可以参看我的博客:HTTP协议详解一.三次握手:第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确

2016-03-30 20:21:08 1451

原创 Android中JNI编程详解

前几天在参加腾讯模拟考的时候,腾讯出了一道关于JNI的题,具体如下:JNI本身是一个非常复杂的知识,但是其实对于腾讯的这道题而言,如果你懂JNI,那么这道题会非常简单,就相当于C语言中的hello world级难度。下面就我自己翻看的一些参考书及网上的一些资料,综合自己的思考与理解,以腾讯的这道考题为例来详细讲解关于JNI的知识。JNI是Java Native Interface的

2016-03-30 11:13:15 9777 1

原创 javaRMI详解

前几天在阿里内推一面的时候,面试官问到了一个关于java中RMI的问题,当时感觉自己回答的还比较好,他比较满意,但那是因为他问的比较浅,所以自己看了一些关于java方面的书籍及网上相关资料,根据自己的理解,谈谈java中的RMI。

2016-03-28 11:16:36 1420

原创 JavaI/O体系详解

Java中IO操作主要是指使用Java进行输入,输出操作,Java中所有的IO操作类都存放在Java.io包中,在使用时需要导入此包。在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File,InputStream,OutputStream,Reader,Writer,分别用来进行文件操作,输入输出字节流,输入输出字符流操作,一个接口指的是Serializable,用来将对象

2016-03-27 19:36:18 2471

原创 【java虚拟机系列】java中类与对象的加载顺序

首先了解一下Java虚拟机初始化的原理。JVM通过加装、连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用。类型的生命周期如下图所示:装载和连接必须在初始化之前就要完成。类初始化阶段,主要是为类变量赋予正确的初始值。这里的“正确”初始值指的是程序员希望这个类变量所具备的起始值。一个正确的初始值是通过类变量初始化语句或者静态初始化语句给出的。初始化一

2016-03-27 11:50:18 4495

转载 Java内存泄露的理解与解决

本博客将详细讲解java中的GC机制,引用机制和在此基础上对java中的内存泄漏的理解与解决。Java内存管理机制在C++ 语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。 Java 语言对内存管理做了自己的优化,这就是垃圾回收机制。

2016-03-27 11:27:12 856

转载 JVM的内存区域模型

首先要明白一个概念,就是JVM的内存区域划分与java的内存区域模型是两个不同的概念,前者指的是在java中jvm会将一个程序划分为哪些块来存储对应的数据,后者是一个更宏观上的j概念,指的是java线程与主内存之间的一种关系模型,后者主要解决java中的线程间通信与同步。  Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域

2016-03-27 11:04:00 1118

转载 JAVA类加载机制

Java类加载机制类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。    在java.lang包里有个ClassLoader类,ClassLoader 的基本目标是对类的请求提供服务,按需动态装载类和资源,只有当一个类要

2016-03-27 10:11:48 1058

原创 java集合框架

首先来看看java集合框架的结构图从java集合框架的结构图,我们可以看到java集合框架包含两个大的部分:Collection与Map一Collention接口:Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些

2016-03-26 19:26:29 1900

原创 Http协议详解

今天早上阿里内推一面的时候,面试官让我讲讲TCP协议与Http协议,感觉自己TCP协议答得比较好,而Http协议感觉回答的不好,特此看了一下书及网上的一些资料,将相关内容整理如下:一 HTTP协议基于HTTP协议的client与server请求包含4个过程:1.建立TCP套接字连接;(HTTP使用面向连接的TCP作为运输层协议,保证了数据的可靠传输,但HTTP协议本身是无连接的)2

2016-03-26 17:07:36 1612

原创 【数据结构栈应用系列】括号匹配

括号匹配算法在各种编程的IDE工具中都会用到,用来检测关于括号匹配的语法错误,括号匹配实际上不复杂,主要就是利用栈这个数据结构,扫描输入的字符串,若遇到左括号则直接入栈,若遇到右括号则弹出栈顶括号,看是否与当前括号类型相同(如同为小括号(),或同为[],注意括号应该是在英文输入法的情况下输入的),若相同则二者匹配,否则不匹配,另外,如果扫描完成,而栈中仍存在未匹配的括号,则说明不匹配,当且仅当扫描

2016-03-26 16:59:10 14713 1

原创 【二叉树系列】二叉树课程大作业

本博客将以代码的形式详细讲解二叉树的所有算法,包括创建二叉树,二叉树的三种遍历方式,二叉树的各种属性算法,如:求高度,求叶子节点数,求节点数,以及二叉树最常见的应用哈夫曼树,代码如下:# include# include# include# include# define N 1# define M 2*N-1typedef char * HC[N+1];typedef stru

2016-03-26 16:21:35 68378 1

原创 【数据结构排序算法系列】数据结构八大排序算法

排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据结构中常见的八大排序算法进行详细的讲解。写在前面的话:首先要明白在学习同类型的排序算法时,一定要明白任何相同领域存在的东西一定是竞争之后的结果,所以对于相同类型的排序之所以能够存在多种被人熟

2016-03-25 22:36:40 100004 9

原创 【设计模式】java设计模式总述及观察者模式

今天在准备腾讯的面试时想起来要复习一下设计模式,而刚好前几天在参加网易的在线考试的时候,也出了一道关于设计模式的选择题,主要是考察观察者模式,虽然那道题自己做对了,但觉得还是应该好好总结一下设计模式的内容。一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式

2016-03-24 11:21:25 2524

原创 StringBuffer与StringBuilder详解

刚刚在参加网易实习生在线考试的时候,出了一道选择题谈到了StringBuilder这个类的一些选项,虽然那道题自己做对了,但是也提醒了我应该好好了解一些StringBuffer与StringBuilder。先来看看这两个类的类结构图:从类的结构图,我们可以看到:1)StringBuffer与StringBuilder都实现了相同接口CharSequence,Serializable

2016-03-22 21:42:04 853 1

原创 Activity与Fragment的生命周期详解

在安卓中Activity与Fragment是非常相似的两个类,它们各自都拥有自己的生命周期,且都可以用来显示布局文件中的视图。其中Activity是通过setContenView()显示视图,而Fragment是通过在onCreateView()中将布局xml文件解析为一个View然后返回该View来显示视图,也正因为具备相似的功能,所以它们的生命周期也极为相似,熟练掌握它们的生命周期是做出高效稳

2016-03-21 18:44:49 7288

原创 安卓中的事件分发机制之View控件

前言:Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev);能够响应这些方法的控件包括:ViewGroup、View、Activity。继承ViewGroup的大多是容器控件,如LinearLay

2016-03-21 10:26:53 1052

原创 安卓ListView的性能优化

在安卓APP中LIstView这个控件可以说基本上是个APP就会用到,但是关于ListView除了需要了解其最基本的用法外,作为一个要做出高性能APP的程序员还需了解一些关于LIstView控件性能优化的基本知识,下面我通过代码一步一步优化的过程来让大家了解LIstView性能优化的相关知识。一.重用converView:使用LIstView那么你肯定会重写Adapter类中的getView(

2016-03-20 15:07:42 1008

原创 安卓图片缓存技术

概述:随着手机硬件水平的提高及摩尔效应带来的成本的降低,用户手机上的图片的分辨率越来越高,而对于移动终端而言内存存在一定的限制的,如果程序占用过高的内存,也会抛出OOM异常,降低了APP的用户体验感。另外自己做的APP应该尽可能的减少安装包的体积。本博客主要讲述通过压缩图片来减少安装包体积和通过使用图片缓存技术来高效加载大图。一 压缩图片:     在现实高分辨率图片的时候,最好先将图片进

2016-03-20 11:19:19 3651

转载 计算机网络常识

1.       OSI , TCP/IP ,五层协议的体系结构OSI分层(7层) :物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层) :网络接口层、网际层、运输层、应用层。五层协议(5层) :物理层、数据链路层、网络层、运输层、应用层。每一层的作用如下 :物理层:激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及

2016-03-19 10:15:27 1631

转载 数据库三种范式详解

.范式说明1.1 第一范式(1NF)无重复的列     所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能同时有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重

2016-03-18 21:37:53 2446

原创 将一个数组划分为和差值最小的子数组

要求:将数组中的数划分为两组,使得两个子数组的和的差值最小,数组中的数的取值范围为0如:a[]={2,4,5,6,7},得出的两组数:{2,4,6}和{5,7},abs(sum(a1)-sum(a1))=0;如:{2,5,6,10},abs(sum(2,10)-sum(5,6))=1;所以:子数组为:{2,10}和{5,6}。思路:很容易知道如果选取的某个子数组的和currentS

2016-03-18 17:21:11 21341 2

原创 删除主串中模式串出现的字符

要求:输入一个主串X和模式串Y,要求删除主串X中在模式串Y中出现的所有字符。如:主串X:welcome to tencent. 模式串Y:aeio。则输出结果为:wlcm t tncnt.思路:最直接的思路就是用两层for循环,外层for循环扫描主串X,内层for循环用来扫面当前主串X中的字符是否在模式串Y中出现,如果出现则去除该字符,即将从该字符往后到主串末尾全部字符往前移动一位。但这样

2016-03-17 20:05:40 1736

原创 字符串的排列

要求:输入一个字符串,打印出该字符串中的字符的所有排列。如:输入字符串abc,则打印出abc,acb,bac,bca,cab,cba.思路:我们可以把一个字符串看成是两部分组成:第一部分为它的第一个字符,第二部分为余下的全部字符。求整个字符串的全排列我们可以看作是:首先求所有可能出现在第一个位置的字符,即把第一个字符和余下的每一个字符交换,第二部:固定第一个字符,求余下字符的全排列。这个时

2016-03-17 17:10:35 27114

原创 字符串的组合

要求:输入一个字符串,输出该字符串的所有组合。如:若字符串为:abc,则应输出:(空集),a、b、c、ab、ac、bc、abc.思路:考虑到数学中的排列组合知识,我们知道所谓组合即是在字符串中选取某些字符组合在一起,而在二进制中我们可以用0代表未选取某字符,1代表选取了某字符,这样自然可以想到用位运算来实现该过程。位运算结果为1则代表该位被选取。如000代表空集,001代表选取最后一个字符

2016-03-17 16:32:38 4094

原创 打印二叉树和为某一值的路径

要求:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。二叉树的节点定义如下:struct BTNode{ int data; BTNode *leftChild; BTNode *rightChild;};思路:因为求路径是从根节点到叶子结点,所以我们可以考虑二叉树的先序遍历框架,如下所示:

2016-03-16 20:39:17 2460

原创 顺时针打印数组

要求:输入一个矩阵,按照从外向里以顺时针的顺序打印出每一个数字。如:如果输入的矩阵为:1   2   3    45   6   7    89  10 11  12       13 14 15  16   则输出结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:根据题目描述,我们可以得到一些提示信息,即我们可以把该矩阵看作是一个

2016-03-16 18:35:18 29329

转载 算术表达式

题目描述:    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。输入:    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。输出:    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。样例

2016-03-15 21:58:36 2291

转载 堆内存与栈内存详解

一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 2、堆区(heap)— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表3、全局区(静态区)(static)

2016-03-15 21:23:46 873

原创 【腾讯校招在线考试附加题】将一个10进制数转换为四位定长的36进制数

要求:思路:首先很容易知道当n的值35时,我们我们举几个简单的例子来分析一下:如n=36,则最终结果为0010,我们知道将一个10进制数转换为k进制数采用的是除k取余,即将该数n对k取余所得结果放在最低位,然后将n不断除以k然后取余放在次低位直至余数为0为止。如:36%36=0,所以最终结果最低位为0,然后将(36/36)%36=1,所以次低位为1,然后将(1/36)%36=0所以循环

2016-03-14 21:12:56 1929

原创 反转链表

要求:定义一个函数,将一个链表反转。链表节点定义如下:struct ListNode{ int data; ListNode *m_pNext;};思路:所谓反转即将链表中某个节点的原本指向后一个节点的指针域指向前一个节点,如果用pCurrent表示当前处理节点,pPrev表示当前处理节点的前一个节点,则很容易想到,反转即pCurretn->m_pNext=pPrev;但是如果直接

2016-03-13 21:48:09 1229

原创 记录github出错及解决方案

刚刚在github上更新自己项目的一些内容时出现了一些错误,几经折腾及在网上查找资料终于解决。具体记录如下:主要就是就是在push时报错,错误信息如下:根据报错信息原本以为是要重新pull一下,但是pull后重新push出现如下错误:后来在一位美女的博客上找到解决方案(PS:那位美女好像是百度员工,膜拜膜拜)1.git pull2 如果提示冲突,解决冲突3g

2016-03-13 15:30:21 840

原创 【美团校招在线考试笔试题】钱币面值组合

要求:假设我们有8种不同的钱币面值{1,2,5,10,20,50,100,200},用这些钱币组合成一个给定的数值n,如:n=200.那么一种可能的组合方式为:200=3*1+1*2+1*5+2*20+1*50+1*100.求总共存在多少种组合方式?注:这是本人参加美团校招在线考试的笔试题(共两道,另一题请参看我的博客:【美团校招笔试题】去除字符串首尾空格,中间多个空格只保留一个)思路一:

2016-03-13 10:01:30 3026 1

原创 找出一个整型数组中只出现了一次的数字

要求:一个整型数组中除了两个数字外(记为X,Y),其余数字都出现了两次,请写程序找出这两个只出现了一次的数字,要求:时间复杂度为O(n),空间复杂度为O(1)。     思路:假设数组中只有一个数字出现了一次,则很容易想到将数组中全部元素进行异或运算的结果即为只出现了一次的元素,所以如果是两个元素出现了一次,则异或后的结果为这两个元素异或后的结果(记为S),因为这两个数字不一样,所以最终的结果

2016-03-12 21:27:58 1555

原创 用动态规划解决最长公共子序列

要求:最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。而最长公共子串(要求连续)和最长公共子序列是不同的  运用动态规划解决,不懂的可以参考任意一本算法书,一般都会介绍动态规划算法,以下部分解析选自算法书上。

2016-03-12 16:37:30 1306

原创 【数据结构队列的应用】用队列打印杨辉三角

数学中的杨辉三角大家都不陌生,那怎样用程序的方式求n行的杨辉三角呢?方法很多,队列就是其中的一种。下面给出基于队列实现的杨辉三角。# include# define M 100typedef struct { int a[M]; int front,rear;}sq;void init(sq *q){ q->rear=q->front=0;}int enter(sq *

2016-03-12 11:00:58 9561

原创 约瑟夫环

要求:约瑟夫环的一种描述为:序号为1,2,...,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数),开始时任选一个数作为报数上限m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,报的m的人出列,将他的密码作为新的m值,从他开始在顺时针方向的下一个人开始重新从1报数,如此下去,直至所有人全部出列,请设计一个程序,求出出列顺序。如:当m的初始值为20,n=7,7个人的密码依次

2016-03-12 10:09:54 1336

原创 数据结构排序算法之堆排序

关于堆排序的相关知识非常复杂,不懂得可以参考任意一本数据结构教程,本博客只对堆排序框架及代码进行讲解。堆排序分三个大的步骤:建初堆,堆调整,堆排序(其中最核心的是堆调整)1建初堆:从数组中的最后一个非叶子节点开始,从下而上倒推(重复调用堆调整函数)2堆调整:堆调整的前提是已建好了一个堆,但是因为输出,导致需要重新调整堆3堆排序:从数组中所有元素开始,将堆顶元素与堆尾元素交换,然后数

2016-03-11 16:45:26 29574

NDK开发so层与java代码相互调用

NDK开发so层与java代码相互调用

2017-06-14

安卓逆向分析基本工具集合

安卓逆向分析基本工具集合,包括apktool,dex2jar,jd-gui,android killer

2017-06-07

安卓动态换肤

动态加载未安装的apk中的资源文件,实现类似QQ换肤效果

2017-06-03

【数据结构课程大作业】通信录管理系统

该软件为本人数据结构课程设计作业,采用win32控制台程序,基于链表的增删改查,实现简单的通信录管理系统,具体可以参看我的博客http://blog.csdn.net/htq__/article/details/50846567

2016-03-10

空空如也

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

TA关注的人

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