自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星宇宙的专栏

重视基础的技术分享者

  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android 开源框架Universal-ImageLoader的使用

ImageLoader 是一个图片加载开源框架,他的很多优点帮助我们解决了开发中图片加载的大部分问题。优点如下:高效加载。基于BitmapFactory.Options的inSampleSize属性缩放图片,减少了OOM的问题。LRU缓存策略。LRU算法的核心思想是释放最近最少使用的缓存,ImageLoader内部用LruCache和DiskLruCache实现内存缓存和硬盘缓存,避免

2016-06-30 16:26:41 418

原创 Java 彻底弄明白synchronized的使用

多个线程访问共享资源(临界资源)的时候,会出现线程安全问题,安全问题大多数是可见性问题和原子性问题。可见性:例如执行多个线程执行a++,那么多个线程就会被分配到不同的处理器上,每个处理器都从主存上复制操作一份拷贝,处理完成后复制给主存。由于分配到了不同的处理器上,两个线程的操作可能会互相覆盖,这样的结果就会和预想的又偏差。例如如下代码:private volatile static i

2016-06-23 18:08:59 7924

原创 java 中断线程

线程在运行过程中,如果我们希望线程可以中断,则可以使用以下方法,停下来之后我们可以决定线程是终止下来 还是继续执行,本质上来说,中断只是一个线程信号,希望能引起线程的注意。本文中,我们中断之后采用终止执行。使用Interrupt()中断线程:interrupt方法实际上是让程序发生抛出一个InterruptedException(被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,

2016-06-22 16:47:50 392

原创 Java中 Thread和Runnable实现多线程的区别和联系

Java有两种方式实现多线程,第一个是继承Thread类,第二个是实现Runnable接口。他们之间的联系:1、Thread类实现了Runable接口。2、都需要重写里面Run方法。他们之间的区别“1、实现Runnable的类更具有健壮性,避免了单继承的局限。2、Runnable更容易实现资源共享,能多个线程同时处理一个资源。看一下以继承Thread的买票例子:publ

2016-06-22 12:18:19 7539 4

原创 Java算法 归并排序

归并排序是典型的采用分治法的算法,可以将一个无序序列变的有序,其步骤是将序列分成若干个有序序列,然后在将有序序列合并。 public static void main(String[] args) { // TODO Auto-generated method stub int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 }; sort(

2016-06-20 13:35:31 276

原创 java数据结构 堆与堆排序

堆的定义:1、堆是完全二叉树,能有效的访问的树中最大或者最小的元素。2、他常常使用一个数组实现。3、堆中每个节点的值都大于或者小于这个节点的值。当堆中的父节点总是大于子节点的时候,我们称之为最大堆,反之称之为最小堆。如下图a和b所示,他是一个最小堆与最大堆(图片摘自网络http://www.lxway.com/225509804.htm,侵权请告知)堆的索引:堆用数

2016-06-17 22:59:46 536

原创 两个链表的第一个公共节点

题目:输入两个链表,找出他们的第一个公共节点。输入:单链表A:4,3,2,1,单链表:3,2,1输出:3解题思路:1、得到两个链表的长度,链表A减去链表B的长度得到变量DPSLength。2、如果变脸DpsLength大于0,则链表A往前走DPSLength步,否则,链表B往前走DPSLength步。3、接下来,两个链表同时遍

2016-06-15 16:04:26 1466

原创 面试题35 第一个只出现一次的数组

题目:在字符串中找出第一个只出现一次的字符,如输入“helloWorld”,则输出“H”,要求时间复杂度为0(N)输入:字符串:helloWorld输出:字符:h解题思路:1、创建哈希表A,遍历字符数组,将字符作为Key,出现次数做为value。2、如果Key没有重复出现,则Value设置为1,否则Value累加1.3、遍历哈希表,找到第一个Value为1的字符

2016-06-15 15:28:10 472

原创 面试题31 连续子数组的最大和

题目:输入一个整形数组,数组中一个或者多个数组组成一个子数组,求所有子数组和的最大值,要求时间复杂度为0(n).输入:{1,2,-1,4,6,8,-6};输出:21解题思路:1、从头到尾累加数字,声明变量A保存累加结果,声明变量B保存所有子树和的最大值。2、累加过程中,如果当前累加结果小于0,那么我们就抛弃之前的运算,否则进行累加。3、最后让变量A和变量B对

2016-06-15 15:07:08 364

原创 面试题29 数组中超过一半的数字

题目:数组中有一个数字的出现次数超过了数组的一半,请找出这个数字,例如输入一个长度为8的数组{1,3,7,7,7,7,7,5},由于7出现了5次,所以输出7.输入:{1,3,7,7,7,7,7,5}输出:7解题思路:1、该数字出现次数最多,循环每个数字,并用一个变量A保存数字出现次数另一个变量B保存出现最多次数的数字。2、当下一个

2016-06-15 14:37:47 273

原创 面试题26 复杂链表的复制

题目:请实现函数ComplexListNode(LinkNode head),复制一个复杂链表。在复杂链表中,出了有Next指针意外,还有一个Sibling指向链表中的任意节点或者Null,节点定义如下:public class LinkNode{ public int data; public LinkNode next; public LinkNode subLing;}

2016-06-15 14:22:04 353

原创 面试题 25 二叉树中的和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。输入:二叉排序树序列:8,2,7,10. 节点和:17输出结果:7 2 8解题思路:用递归的方式前序遍历从根节点往下寻找,每次向下寻找,我们就把找过的节点放入一个栈里面,并且用一个节点累加该节点的值,如果该值等于要找的整数

2016-06-15 14:10:08 387

原创 面试题24 二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉排序树的后序遍历。如果是返回true,否则返回false。假设该数组 任意两个数都不相同。输入:二叉搜索树后序遍历序列:7,6,4,5输出:false解题思路:二叉搜索树的后续遍历序列,往往序列中最后一个数字是根节点的值,因此,序列可以分为两部分,一部分比根节点小的为左子树,比根节点大的为右子树。我们接下来用同样的方法来

2016-06-15 12:13:20 462

原创 从上到下打印二叉树

题目:从上到下打印每个二叉树节点的值,用一层按照从左到右的顺序。也就是层序遍历。输入:输出:50 20 60 15 30 70 解题思路:从根节点分析,我们要把一个二叉树存入一个容器,这个容器可以按照存入顺序,依次把二叉树的根,左子树,右子树出列。在这里,我们使用队列。Java代码实现:public static void main(String[] a

2016-06-14 12:39:47 379

原创 面试题22 栈的压入、弹出序列

题目:输入人两个整数数列,第一个序列为栈的压入序列,判断第二个序列是否为栈的弹出序列。输入:压入序列A:1,2,3,4,5和弹出序列B:4,5,3,1,2输出:false解题思路:我们需要一个辅助栈和两个指向序列A和B的指针pushNext(指向序列A的第一个元素),popNext(指向序列B的第一个元素),栈的作用是压入和弹出 序列A。每次压入的时候,我们需要做对

2016-06-14 12:24:35 421

原创 面试题21 包含Min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,请用mim,push,pop的时间复杂度都为O(1)输入:10,20,9输出:最小元素:9解题思路:如果仅仅用一个栈,那么当出栈的时候如果是最小元素,我们无法获得此小元素,因此,我们可以使用一个辅助栈,当我们插入一个元素的时候,让他和辅助栈的栈顶对比,如果小于辅助栈栈顶,也插入辅助栈

2016-06-14 11:55:21 445

原创 顺时针打印矩阵

题目:输入一个矩阵,按照从外向里的方式按照顺时针依次打印出每一个数字。输入:{{1, 2, 3, 4, 5},{6, 7, 8, 9, 10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};输出:1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19

2016-06-14 01:35:59 583

原创 面试题19 二叉树的镜像

题目:输入一个二叉树,输出该二叉树的镜像输入:二叉排序树的前序遍历:8 2 4 7 9 10 输出:该二叉树的镜像的前序遍历:8 9 10 2 4 7 解题思路:本质上就是不停的交换二叉树的左子树和右子树,直到树的叶节点或者节点为空。Java代码实现:public static void main(String[] args) { // TODO Auto-

2016-06-14 00:49:52 364

原创 面试题18 树的子结构

题目:输入两个二叉树A和B,判断B是不是A的子结构,二叉树的结构如下:public class Node{public Node(int data){ this.data=data; } public int data; public Node leftChild; public Node rightChild; }输入:树A和树B,他们都是二叉排序树。

2016-06-14 00:36:17 471

原创 面试题17 合并两个排序链表

题目:输入两个递减链表,合并这两个链表之后的节点依然是按递减排序的。如下所示,让链表一和链表二变成链表三。链表一:链表二:链表三:输入:链表一和链表二都是采取头插法的单链表。输出:链表三解题思路:链表先从头结点合并,如果链表1的头结点大于链表2的头结点,那么链表3的的头结点为链表1的头结点,反之为链表2的头结点。我们往下依然可以重复以

2016-06-13 22:26:45 684

原创 面试题15 链表中到户第K个节点

题目:输入一个链表,输出该链表中倒数第K个节点。为了符合少数人的习惯,本题从4开始计数,从头结点到尾节点依次为4,3,2,1,。倒数第3个节点为2.输入:一个头插法的单链表(4,3,2,1),和K(3)输出:第K个节点的值:2解题思路:有两种解法,第一种是通过遍历单链表获取其总长度,然后让总长度M减去K加上1获得正数位置L,就是倒数第K个节点。但是这样需要循环两次。第二

2016-06-13 20:30:25 360

原创 调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,是的所有奇数位于数组的前半部分,偶数位于后半部分。其实还有后半段,就是考虑函数的扩展性,当然书中另外说明了。输入:任意正整数序列,是序列长度大于(0输出:所有奇数在前面,偶数在后面解题思路:我们可以用分治法来解决这个问题,比如声明两个指针,第一个指针指向序列首位,他向后移动。第二个指针指向序列尾部,他向前移动

2016-06-13 20:04:53 522

原创 面试题11 :O(1)删除单链表节点

题目:写一个函数delectNode(Node header,Node delectNode),在O(1)的时间删除该节点。输入:输入一个头插法的单链表。从头到尾是321,要删除的节点是链表头输出:21解题思路:目前想到有两种,第一种效率较高,我们可以获得要删除的节点的下一个节点,我们只要把下一个节点复制给当前节点就可以了。但是还需要考虑几个问题,要删除的节点是否为空,

2016-06-13 17:23:16 2204

原创 数值的整数次方

题目:实现函数Power(double base,int exponed),求base的exponed次方,不能使用库函数,不需要考虑大数问题。输入:输入一个浮点型数字和一个整数数字(不管正负)输出:浮点数的整数次方解题思路:这样的问题很简单,但是要考虑一些边界性问题,比如base的exponed次方如果都为0,那么在数学上就是没有意义的,所以我们要进行特殊处理,还有如

2016-06-13 15:58:11 454

原创 面试题10 二进制中1的个数

题目:请实现一个函数,输入一个整数,输出该数二进制1的个数。例如2为0010,该函数输出1.输入:一个整数(不管正负)输出:该整数1的个数解题思路:最先想到的方法是该整数与一个整数1做于操作,每做一次,该整数左移一位,直到变成0,基于这样的思路不难写出代码一。但是这样的话,代码一会在输入负数的时候,会引起死循环,所以我们可以声明变量B(初始为1)与该整数做与操作,每做一

2016-06-13 15:25:58 417

原创 面试题九斐波那契和青蛙跳台阶

题目:要求输入一个整数n,请你输出斐波那契数列的第n项。如下:输入:一个正整数n输出:斐波那契数列的第n项解题思路:有两种,是通过递归来实现,这种方法最大坏处是在于很多地方是重复计算的,所以,我们可以考虑从下往上来实现这个函数 public static void main(String[] args) { // TODO Aut

2016-06-13 15:03:55 447

原创 用两个栈实现队列

题目:用两个栈实现一个队列。队列的声明如下,请实现他的两个函数 appendTail,deleteHead分别在队列的尾部插入数据,和队列头部删除数据。输入:1234,输出:1234;解题思路:队列是先进先出,栈是后入先出,我们的第一个栈专门用于插入数据,第二个用于存入第一个栈的出栈, 那么当我们要删除队头的时候,只需要从第二个栈中出栈就可以了Java代码实现:

2016-06-13 11:50:12 289

原创 面试题八 旋转数组的最小数字

题目:输入一个按递增排序数组的一个旋转,输出该数组的最小数字。输入:12345的旋转可以是34512,所以我们输入34512.输出:1解题思路:较为直观的方法是每一个数据都扫描一遍,找到最小的元素,这样的时间复杂度为0(N),但是可以 利用2分法,用两个指针分别指向数组的第一个元素和最后一个元素,接着我们找到指针之间的中间元素,通过判断中间元素是大于第一个指针来判断是在

2016-06-13 11:32:49 368

原创 面试题五 从头到尾打印单链表

题目:输入一个单链表从头到尾,从头到尾打印单链表的每个值输入:由于我的单链表是使用头插法的,所以当你输入4321的时候,节点从左到右的顺序是1234,所以,当我们输入4321的时候,只要保证输入和输出一样就完全正确输出:跟输入一样实现思路:在不修改数据结构的前提下,有两种方式,一种是利用栈,因为栈后进先出的缘故,我们可以把单链表扫一遍,然后存入栈后依次出栈,第二个可以用

2016-06-13 11:01:46 638

原创 面试题四 替换字符中的空格

题目:请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“Hello World” ,输出“Hello%20World输入:Hello World输出:Hello World实现思路:一般我们可以用遍历的方法来实现,但是字符串较长时会出现大规模的移动,其次时间复杂度为O(N的2次方)。我们可以有更好的方法,就是计算出 空格后字符的容量,然后声明两个指针,一个

2016-06-13 10:49:17 419

2018最新全国行政区划代码sql文件

1、从国家统计局下载《最新县及县以上行政区划代码(截止2018年4月10日)》 2、转成utf-8文本 3、自编php程序,读取文本入库Mysql 4、4字段设计,简洁干净 5、无毒、无污染、无外挂 6、欢迎使用

2018-04-18

空空如也

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

TA关注的人

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