自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 https加密的实现

以下是理论部分,仅供理解参考,如果要粘代码,网上会有很多,此处不再提供关于https加密:https是在http的基础上多了一次协议ssl,该协议用来给传输的内容进行加密https加密流程:1,客户端将SSL 协议的版本号、加密算法的种类,产生的随机数A等信息传给服务器2,服务器选择其中的一种组合作为加密方式,同时将自己的证书、公钥、另外一个随机数B一起传给客户端3,客

2016-09-30 14:49:25 15823

转载 Git常用命令总结

Git常用命令总结git init     在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone     获取一个url对应的远程Git repo, 创建一个local copy.     一般的格式是git clone [url].     clo

2016-09-30 11:38:39 348

原创 serialVersionUID的作用和生成方式

serialVersionUID的作用:1,一个类如果要用于传输或长久地存到硬盘,必须变成二进制的形式,再次用到就需要将二进制还原回来,这就是序列化于反序列化,但怎么保证中间不出错呢,那么就需要为实现serialable的类生成一个serialVersionUID,它是唯一的,即是这个类改变了一个空格都会发生改变,但如果实现生成了,就不会再发生变化。2,用来兼容不同的版本

2016-09-19 16:49:54 3538

原创 常见错误,记录下

duplicatefileexception  文件重复异常,会给出两个文件,File1: File2:这个两个文件所在的文件夹里出现相同的包或类,解决方案:删除其中一个就好,一般出现在引用外部libs过多时会出现DexException 而且会出现**value = 0,或1,2此时一般是libs重复异常,两个libs同时拥有某个文件,解决方案:删除其中的一个用处不大的包,但

2016-08-19 11:59:29 405

原创 android事件分发机制

android的事件分发机制,很难让人理解,即是有“吃鱼”的例子形象比喻依然,于是将它画成流程图,更加容易明白:图中字体有点小,见谅,大致意思如下:分发层次:activity---viewGroup(当然中间可有很多层viewGroup,原理相同)--view分发方法:activity中只有分发、处理两个方法;viewGroup中有分发(disPathTouchEvent)、拦

2016-08-13 16:38:16 289

原创 Java中hashSet与treeSet的去重原理

地球人都知道set集合是不含重复元素的,那么其去重原理是什么,我们又可以做哪些用途呢?1,treeSet去重原理:compareTo可以实现排序及去重:如果compareTo返回0,说明是重复的,返回的是自己的某个属性和另一个对象的某个属性的差值,如果是负数,则往前面排,如果是正数,往后面排;应用:类实现compareable接口,覆写其compareto方法,根据自己的需要改

2016-08-12 20:20:13 9829

原创 线程池的应用和解析

系统的资源不是无限的,当你开启一个个的线程时,又或者当你频繁开启一个线程而这个线程有很快工作完毕,此时,系统要不断的创建和销毁线程,需要消耗大量的资源于是就有了线程池,它是专门用来管理线程的,当你 需要时给你创建一个,当这个线程使用完毕后不会马上回收,而是让其空转,然后接受任务队列中的任务进行处理,大大优化了系统资源的配置,(我们常见的例子中,迅雷就是一个,你每次只能进行5个任务的下载,其他都

2016-08-12 19:57:44 1415

原创 android按两次返回键退出程序

在activity中操作,覆写其方法onBackPressed():private boolean isFirst =true;private long lastTime;@Override public void onBackPressed() { if(isFirst){ Toast.makeText(this,"再按一次退出",Toast.LENGTH_LONG).show(

2016-08-11 19:24:54 298

原创 文件放在res/drawable、res/raw、/assets下的区别

首先说下/res 和/assets两个文件夹的不同/res 下的文件是受android系统约束的,1、放在这个文件夹下,会被映射生成R文件,即访问时通过R.xx.xxx;2、只能有一层目录,再往底层建文件夹就访问不到了;3、打包时自动只打包用的上的文件,没用上的文件不打包;获取输入流的方式:InputStream in = getResources().openRawResource(R.

2016-08-11 17:24:14 3258

原创 android中组件生命周期的总结

1,activity先看图:(此图来自网络,感谢分享者)图示描述比较详细了,总结如下:1,Android的生命周期共有:oncreate()--onstart()--onresume()----onpause()--onstop--ondestroy()........onrestart()这几个2,oncreate()和ondestroy()是一对,分别是activity

2016-08-10 20:38:16 436

原创 关于几个小问题的解决方案

1,Android studio启动后下面的ok确定键点不到,解决方案:这是studio主题中字体设的太大的原因导致的,在setting里面改变size的值即可;2,Genymotion模拟器的虚拟box开启模拟器报错:错误类型为:(VERR_UNRESOLVED_ERROR). 解决方案:这是系统的主题文件被替换的原因,在这里下载系统的主题文件,将C:WINDOWS/system32/uxT

2016-07-25 19:30:09 206

原创 android中handler和looper的工作原理

在android中,UI线程和其他子线程之间传递数据一般要用到handler和looper,那么其工作原理是 什么呢?我们通用的方法是:在UI线程中创建handler--将handler传递到子线程中--在子线程中sendmessage---消息被加载进looper的message队列中--在UI线程中handlemessage该方法我们可以用一个比喻:Handler在某个国家(主lo

2016-06-25 18:12:15 2898

原创 面试题:求任意时间分针和时针之间的度数

double hour = 6;//输入小时 double min = 6;//输入分钟 double a1 = 30 * hour; //以针指12为基准,时针的大致度数--每两个个数字之间是30度 double a = a1 + Math.rint(min /2d) ;//以针指12为基准,时针的准确度数--加上根据分针所在位置对应的时针偏移量,分针每走两下(12度),

2016-06-16 19:24:23 1045

原创 Android中ListView的工作原理

在Android中,listView是一个重要的控件,在使用它时,我们经常自定义适配器Adapter将listView和数据、item布局联系起来;那么listView在上下滑动时,其工作原理是什么呢?每条载着数据的item是怎么一个个加载进去的呢?当发生滑动时,被隐藏的item和新进入的item的底层是怎么工作的?根据这些底层原理我们能做哪些优化?下面我们来共同探讨这些问题。======

2016-06-01 21:40:10 554

原创 android中异步任务AsyncTask的应用和工作原理

android4.0之后,android不允许在UI线程(主线程)中运行其他耗时线程,如网络请求的线程,否则就会崩溃抛出NetWorkOnMainThreadException而且将耗时线程放入主线程中执行,会大大影响客户体验,所以android为我们提供了其他的处理方法,其中一种常用的就是,异步任务AsyncTask;AsyncTask的底层其实是对Thread、Handler、Mess

2016-05-31 18:55:01 1870 1

原创 android中的四种启动模式launchMode

在android的配置文件AndroidManifest.xml中,我们需要设置android的启动模式一共有四种,分别是:standard(标准-默认的) singleTop(栈顶单例)  singleTask(任务中单例)  singleInstance(全局单例)首先我们知道:activity工作时会涉及到TASK,每个TASK都对应一个BackStack,每次执行一个activit

2016-05-30 19:12:20 675 2

原创 Android常用布局极其优缺点

1,RelativeLayout(相对布局)此布局应用最为广泛!优点:灵活性高--控件可以任意摆放位置、可以立体重叠摆放-------->适合作为最外层布局缺点:需要不断地设置参考系,使用较为繁琐,操作不当会造成控件之间相互影响2,LinearLayout(线性布局)优点:自动在一个方向上进行布局,通过距离或权重控制控件的放置---------->操作简单,容易上手缺点:死

2016-05-25 19:32:51 5741

原创 Android中不同Activity之间的数据传递

需要用到的类及方法:类似:两个国家做贸易,交易货物;--传递载体:intent(货船)--需要传递的内容:用bundle(集装箱)包装的string(某控件的值)--对接方法:onActivityResult(海关):需要验证requestCode(请求密码)和resultCode(返回密码),接收返回的intent2;--Acitivity1(国家1):startActi

2016-05-24 18:58:47 2280

原创 八大排序算法 之 冒泡排序VS选择排序

排序思想:(二者相同)每次循环将最大值拿出来放到最后(或将最小值放到开头),n-1趟循环后,即可完成排序排序趟数:最大n-1趟排序原理:冒泡排序:每次循环,从第一个数开始,相邻数依次比较,较大的往后放选择排序:每次循环,拿出第一个数作为最小值,跟后面所有数依次比较,每次记录最小值得下标,最后将第一个数和最小值交换代码实现如下://冒泡排序 public s

2016-05-07 15:00:09 905

原创 八大排序算法 之 直接插入排序

排序思想:进行n趟循环,保证每趟把前n个数字变成有序的,n趟过后,数组就会变成有序的排序趟数:n-1趟排序原理:每趟找到当前n对应下标的数字作为基准,往前面比较,找到合适的位置插入,以保证这趟过后,数组前部分数字有序参考图片:实现代码如下: //直接插入排序 public static void insertSort(int[] array){ for

2016-05-07 11:49:13 342

原创 八大排序算法 之 快速排序(填坑法)

排序思想:1,将第一个数字作为基准数字,将数组分为左右两部分,左边是比它小的数字,右边是比它大的数字;2,将左部分按照上面的思想再次进行划分成两部分,依次类推;3,将右部分按照上面的思想再次进行划分成两部分,依次类推;排序趟数:不确定排序原理:填坑法:1,将第一个数字作为基准数字拿出,留下一个坑,从数组的最后开始往前循环,发现比基准数字小的就把它填到之前留下的坑里,

2016-05-07 11:36:51 2877

原创 八大排序算法 之 希尔排序(缩小增量排序)

排序思想:1,希尔排序属于插入排序算法;2,希尔排序是插入排序算法的优化,插入算法在插入过程中要移动很多次数字,几趟下来,移动次数就多不胜数,希尔排序的思想是先设法将数组排列成大致有序的,这样再进行插入排序是就会减少大量移动,从而优化算法;3,将数组调整成大致有序的步骤按照原理被称为缩小增量法,即每次拿一个数跟(增量间隔)后的数比较,按大小调整位置(调整方法为插入排序法),每趟执行完后

2016-05-07 11:13:13 1285

原创 八大排序算法 之 归并排序

排序思想:如图所示:排序趟数:如果2^n如此例,9>8,趟数是4.排序原理:1,第一趟将相邻两个数归并成一个有序的小组合;2,第二趟将相邻两个有序小组合归并成一个更大的的有序组合;3,依次类推,直到将所有数归并成一个最大的组合;具体代码实现如下: //归并排序主方法 public static void mergeSort(int[] array){

2016-05-07 10:40:41 660

原创 八大排序算法 之 堆排序(二叉树排序)

例如数组 a={19,3,60,7,1,15,33,24,45,32,79,85};排序思想:1,堆排序也是选择排序的一种,根据堆得特性,每次把最大或最小值(本次以最大值为例)拿出来,按序排列;2,堆排序是对普通选择排序的一种优化:如果是一个稳定堆,每次在选择最大值时,只用沿着二叉树其中一个分叉去交换即可,其他分叉符合堆得特性(因是排好的稳定堆),可以看作是稳定的,不用重排交换,省去了

2016-05-07 10:03:43 20660 3

原创 八大排序算法 之 基数排序(桶排序)

如数组:{458--296--13--7--697--61}排序思想:1,先按个位上的数字大小顺序排列,结果为61--13--296--7--697--4582,在上述顺序的基础上,按十位上的大小顺序排列,结果为:7--13--458--61--2963,在上述顺序的基础上,按百位上的大小顺序排列,结果为:7--13--61--296--458对于上述,最大数是三位数的数组,只

2016-05-05 21:02:40 625

原创 java中常用的集合极其特点

java.util.Collection [I]+--java.util.List [I]    +--java.util.ArrayList [C]    +--java.util.LinkedList [C]    +--java.util.Vector [C]      +--java.util.Stack [C]+--java.util.Set [I]

2016-04-21 20:34:25 2122

原创 java中常见异常的结构和分类

Throwable(父类)ErrorAWTErrorIOErrorLinkageErrorThreadDeathErrorException……(自建Exception)SQLExceptionIOExceptionRuntimeExceptionIndexOutOfBoundExceptionNullPointerExceptionClassC

2016-04-21 20:29:34 373

原创 一个随时间不断变化的值确认其变化范围的方法

例如,实现每一秒钟打印一个“Hello” long tempTime = System.currentTimeMillis(); while(true){ long time = System.currentTimeMillis(); if (time - tempTime == 1000) { System.out.println("Hello"); tempT

2016-04-16 11:39:49 514

原创 java中日期时间格式与毫秒数的转换

//输入日期转化为毫秒数 ---用calendar方法(calendar.getTime) Calendar calendar = Calendar.getInstance(); calendar.set(2018, 2, 15, 8, 31, 5); System.out.println(calendar.getTimeInMillis());//输入日期,转化为毫秒数,

2016-04-16 10:23:20 70232

原创 多态经典面试题解析

多态经典面试题已知类ABCD,B继承于A,C和D继承于B,具体如下public class A { public void print(A a){ System.out.println("A and A"); } public void print(D d){ System.out.println("A and D"); }}public class B exte

2016-04-13 19:25:56 6575 4

原创 在一个数组或字符串中找到出现频率最高的那个元素的方法

思路:1,将数组按大小排序。2,相邻两个元素比较是否相等,并记录相等次数得到这个元素出现的频率3,在比较过程中,不断将最大次数和其对应的元素赋值给一个变量,最后得到出现频率最高的元素4,通过集合收集并再次比较的方法处理多个元素出现频率同时最高的情况我们以双色球蓝球的玩法为例,实现的代码如下: int[] blueBalls = new int[n]; /*

2016-04-06 20:30:53 2036

原创 JAVA常用运算符极其运算优先级的总结

a、算数运算符:  +    -     *      /     %b、赋值运算符: =    +=      -=       *=        /=       %=    &=     |=c、关系运算符:       =       ==        !=d、逻辑运算符:&&    ||        !     e、三目运算符:(  ?   :)f、字符串连接

2016-04-05 20:32:15 19426

原创 巧用“异或”符进行组合中两个元素的位置调换

一般我们要互换一个组合中两个元素的位置时,都会新建一个中间变量,通过这个中间变量去调换,方法如下:例:int a = 10;    int b = 20;1,定义一个变量c,  把a的值给c:c = a;2,将b的值给a:a = b;3,将c给b:b = c;这样完成了a和 b值得互换。那么,可不可以不建立中间变量就完成两个元素的互换呢?异或符---“^”可以做到。

2016-04-05 20:10:18 435

原创 跳转语句continue;break;return的区别

continue: 如果循环语句里有此语句,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。break: 此语句导致程序终止包含它的循环并进行程序的下一阶段(整个循环后面的语句),即不是跳到下一个循环周期而是退出循环。                如果break语句包含在嵌套循环里,它只跳出最里面的循环。 return:表

2016-04-05 19:50:49 504

原创 JAVA环境变量的配置及常用工具说明

首先,到官网www.eclipse.com下载并安装最新版本的JDK。其次,找到设置位置:“我的电脑”(右键)--属性---高级系统设置---高级(默认)---环境变量---系统变量新建系统变量JAVA_HOME和CLASSPATH变量名:JAVA_HOME变量值:C:\Program Files\Java\jdkX.X.X   -------jdk安装目录变量名:CLAS

2016-04-05 19:26:33 500

原创 用String类和Integer等基本数据类型包装类进行实例化对象时的工作原理

1,关于传递:8种基本数据类型(byte,short,int,long,float,double,char,boolean)进行的是值传递;Objiect类的所有子类传递时,传递的是值对应的地址。2,基本数据类型 int a = 10; int b = 10; System.out.println(a == b);//true此处,是基本数据类型,比较的是a,b的值,都是10,所以结

2016-04-04 11:09:31 1709

原创 根据用户需要输出打印菱形,用for循环输出打印星号组成的菱形

代码如下:import java.util.Scanner;//根据输入的行数输出菱形public class Demo { public static void printStar(int a){ int b; boolean temp; //判断输入的数字是奇数或是偶数,并标记 if(a % 2 == 0){ b = a / 2; temp

2016-03-24 20:13:58 11116

原创 如何用程序自动打印Int类型十进制负数的二进制码?

首先,通过数学原理,我们可以轻易用程序打印正数的二进制码,方法比较简单,举例如下:方法一:for循环public static void toBinary(int a ){int b = 0;//定义余数赋值为0String result = "";for(;;){b = a % 2;//求余result = b + result;a /= 2;if(a ==

2016-03-24 13:29:29 629

原创 关于构造方法特性的总结

它具有与类相同的名称; 它不含返回值;在构造方法里不含返回值的概念是不同于 “void” 的,在定义构造方法时加了 “void” ,结果这个方法就不再被自动调用了。 它不能在方法中用 return 语句返回一个值; 当自定义了构造方法后,编译器将不再自动创建不带参数的构造方法 。 当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。一个类中可

2016-03-23 19:29:10 352

原创 int数据类型是几位的?为什么负数通过计算器和通过代码转化为二进制的结果不同?

int数据是占4个字节,每个字节占8位,所以int类型是32位的。例,int a = 123; 则得到~123是-124.但123的二进制码是:1111011补全后是:00000000 00000000 00000000 01111011~123可得:11111111 11111111 11111111 10000100把这个放进计算器中,通过二进制转化为10进制得到的是42949

2016-03-22 17:57:34 1763

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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