JAVA
LVXIANGAN
这个作者很懒,什么都没留下…
展开
-
Android之Semaphore使用
Semaphore(信号量),是一种共享锁,多个线程同时访问一个资源时,通过它实现同一时刻的访问线程数量。最常见的使用场景就是高并发下的限流。举个例子:有10000辆车同时要涌入高速公路,但高速入口没有ETC只有2条人工发卡车道,所有人都必须要被收费亭许可(收费亭确认放行)后才能进入高速。高速公路是大家要共同使用的资源,收费亭就是Semaphore,2个发卡通道是Semaphore的同时允许车辆通过的许可证数量...原创 2021-11-13 13:05:58 · 2939 阅读 · 0 评论 -
单例模式与synchronized
不同应用间通讯方式有很多种,文件共享、广播(BroadcastReceiver)、Sokect、AIDL(Binder)、ContentProvider等,下面介绍下跨进程使用https://www.cnblogs.com/lizhengxian/p/5075635.htmlhttps://www.jianshu.com/p/e8913d42181bhttps://blog.csdn.net/qq_35114086/article/details/53319107https://blo.原创 2021-11-04 22:01:04 · 571 阅读 · 0 评论 -
Java之各种锁,乐观锁、悲观锁、自旋锁、轻量级锁、偏向锁、重量级锁
锁的分类锁从宏观上分类,分为悲观锁与乐观锁乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。 java中的乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。悲观锁 悲观锁是就转载 2020-10-26 22:58:45 · 577 阅读 · 0 评论 -
内存抖动、内存泄露、内存溢出
内存抖动:在短时间内有大量对象被创建或者被回收的现象,主要原因是频繁在循环里创建对象。 在程序里,每创建一个对象,就会有一块内存分配给它;每分配一块内存,程序的可用内存也就少一块;当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出动,来释放掉一部分不再被使用的内存。Android 里的 View.onDraw() 方法在每次需要重绘的时候都会被调用,这就意味着,如果你在 onDraw() 里写了创建对象的代码,在界面频繁刷新的时候,你就也会频繁创建出一大原创 2020-09-06 16:25:34 · 696 阅读 · 0 评论 -
Android之巧用adb命令
我们在使用adb命令对设备进行截屏、录像等操作时,可以配合使用批处理命令。1、一键截屏adb shell /system/bin/screencap -p /sdcard/screen.pngadb pull /sdcard/screen.png C:/Users/lvxiangan/Desktop/"%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%-%time:~3,2%-%time:~6,2%.png"把上述代码保存到文本,重命名:一键截图原创 2020-08-28 14:14:55 · 246 阅读 · 0 评论 -
AndroidStudio之Git提交代码出现author ‘xxx‘ is not ‘Name ‘ and matches no existing author 的解决方法
Android Studio通过VCS提交代码时,收到Commit failed with error,author 'xxx' is not 'Name ' and matches no existing author 如下图:错误原因:Author字段用户名填写错误导致。常见错误如下:随便填写了一个名字,但没有邮箱地址解决方式:调整Author填写内容格式:用户名<lvxiangan@163.com>用户名可自定义,邮箱地址为Git账号邮箱,必须用尖括号包围...原创 2020-08-28 11:45:27 · 5957 阅读 · 1 评论 -
switch case和if else效率区别
switch…case写法:switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; }if…else写法:if(boolean){ }else if(boolean){ }else if(boolean){ }else{ }由此看来,switc...转载 2020-01-14 10:05:57 · 1168 阅读 · 0 评论 -
Java之数据结构
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。Java数据结构继承关系图可以看到,Java 集合框架主要包括两种类型的容器:一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。最上面一层:Iterator、Collection、Map超级接口:Ite...转载 2019-11-03 10:35:51 · 236 阅读 · 0 评论 -
Android之static静态变量生命周期
静态变量引用与内存回收、内存泄露这些问题有关,有必要加深研究和理解。一、静态变量在类被加载的时候分配内存。 类在什么时候被加载?当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个DVM实例,然后代码就运行在DVM之上,类的加载和卸载、垃圾回收等事情都由DVM负责。也就是说进程启动的时候,类被加载,静态变量被分配内存。二、静态变量在类被卸载的时候...转载 2019-11-09 22:03:38 · 521 阅读 · 0 评论 -
Android之启动流程、虚拟机加载流程、代码执行顺序
本文旨在帮助初学Android 开发的朋友了解各种基本流程,有不当之处,欢迎指正。开发App流程环境搭建--->编码--->编译--->打包输出---->安装应用--->运行应用环境搭建:就是安装开发软件(如JRE、Android Studio 、 Eclipse); 编码:新建工程,编写代码,例如写个hello world的demo; ...原创 2017-08-07 18:08:42 · 2634 阅读 · 0 评论 -
Java之transient关键字有什么用
在LinkedHashMap 类中,看到有个关键字transient,它是什么意思呢?下面援引百度百科解释:Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对...原创 2019-10-24 21:07:00 · 447 阅读 · 0 评论 -
Java 一个数字、字母、汉字各占几个字节
汉字字符 2字节 英文字符 1字节 中文标点 2字节 英文标点 1字节 中国字比较复杂,1字节=8位,8位从0000 0000到1111 1111只能表示256个字符,2个字节是2*8=16位,从0000 0000 0000 0000到1111 1111 1111 1111可以表示65535个字符。 6万多个足以表示我们经常用的那些字了。所以我们用2字节表示汉字。如果用3个字节原创 2012-10-11 16:55:04 · 29863 阅读 · 5 评论 -
for循环 i++和++i 的区别
一、相同: 在 i 没有涉及{}内部运算时,两者效果一样。二:不同:++i 是先执行 i=i+1 再使用 i 的值,而 i++ 是先使用 i 的值再执行 i=i+1。速度差别主要是用在迭代器上,++i少复制一次三: for循环的执行顺序如下:for(s1;s2;s3){ s4;} 1.进入循环执行s1;//只是进入的时候执行. 2.执行s2;原创 2012-11-08 15:18:05 · 3589 阅读 · 0 评论 -
Java之Hash算法介绍
相关文章:Java之HashMapJava之equals和hashcode方法什么是hash?英文意思为“无用信息”,计算机通常音译为“哈希”,名字由来:可能是最终形成的哈希表里面,是各种看起来毫无意义的描述值的混合。什么是Hashing?散列法,或者叫哈希法,是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,由于通过更短的哈希值比用原始值进...原创 2013-01-22 15:52:07 · 1168 阅读 · 0 评论 -
java实现多线程的两种方法
java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了。一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个新线程。Thread类是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start(转载 2013-03-29 23:41:18 · 1259 阅读 · 0 评论 -
Java中在特定区间产生随机数
生成指定范围内的随机数这个是最常用的技术之一。程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例。问题往往类似于:如何随机生成 1~100 之间的随机数,取值包含边界值 1 和 100。或者是:如何随机生成随机的3位整数?等等……以 Java 语言为例,我们观察其 Random 对象的 nextInt(int) 方法,转载 2013-04-19 12:09:09 · 1402 阅读 · 0 评论 -
内存溢出与内存泄漏的区别
内存溢出,提供的内存不够;内存泄漏,无法再提供内存资源 。区别 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽)。 1.Java内存泄露是说程序逻辑问题,造成申请的内存无法释放.这样的话无论多少内存,早晚都会被原创 2013-05-02 10:51:08 · 911 阅读 · 0 评论 -
Java之synchronized、wait、notify和notifyAll
总结:// 小王排队办理证件synchronized(窗口) { System.out.println("1111111") window.wait(); window.notify(); System.out.println("222222")}// 路人甲排队办理证件synchronized(窗口) { ...原创 2013-05-30 10:27:57 · 1133 阅读 · 0 评论 -
java socket编程
一,网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为转载 2013-05-30 12:30:16 · 766 阅读 · 0 评论 -
实现服务器端和客户端的Socket通信
使用ServerSocket和Socket实现服务器端和客户端的Socket通信 总结:1) 建立Socket连接2) 获得输入/输出流3)读/写数据4) 关闭输入/输出流5) 关闭Socket1. 编写一个网络应用程序,有客户端与服务器端,客户端向服务器端发送一个字符串,服务器收到该字符串后将其打印到命令行上,然后向客户端返回该字符串的长度,最后,转载 2013-05-30 12:58:18 · 1549 阅读 · 0 评论 -
Java之线程Thread.sleep()的用法
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?2、某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(...转载 2013-05-31 12:51:03 · 4606 阅读 · 2 评论 -
直接 Run 和 Debug 结果不一样?
Debug时内存会初始化,但运行时不会。直接 Run 和 Debug 的时候,可能程序初始化时的内存构造有些不一样,所以导致不同的行为。特别要注意变量的初始化问题,尽可能做到所有类的成员变量以及临时变量的值都要赋初值!我遇到过类似问题,一般说来是由于 内存非法操作 引起的。我告诉你产生此类错误的一个例子,先看下面函数的原形:strcpy(ch转载 2013-05-31 11:44:35 · 14956 阅读 · 0 评论 -
android解析xml获取cdata内容
CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。所有 XML 文档中的文本均会被解析器解析,只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。PCDATA:指的是被解析的字符数据(Parsed Character Data)。XML 解析器通常会解析 XML 文档中所有的文本。<!原创 2013-06-18 12:42:59 · 4334 阅读 · 0 评论 -
for循环详解
代码1:int i = 0;for(int j = 0;j<100;j++){i = i++;}System.out.println(i);输出结果 i= 0i = i++;这句首先取i++运行前的值就是0,然后做i++操作i变成1,最后把第一步的0赋给i就是i=0代码2:int i = 0;for(int i = 0; i < 100; i++){i =原创 2013-06-26 22:41:14 · 1351 阅读 · 0 评论 -
java中包的命名规则
sun公司建议java包的命名规则为域名的倒写比如sun公司www.sun.com就用该是com.sun.www等等,这样可以避免重复!原创 2013-07-19 23:44:34 · 3766 阅读 · 0 评论 -
Java对象引用
1.对象的强、软、弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。图1为对象应用类层次。图1⑴转载 2013-08-09 18:21:22 · 1307 阅读 · 0 评论 -
java内存分配
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中◆堆:存放用new产生的数据转载 2013-11-16 12:40:31 · 1144 阅读 · 0 评论 -
“一次一密”会话密钥的设计
1引言会话密钥用于在网络通讯过程中实现端到端的信息加密,一般是在每次会话时临时产生,一次会话结束后被销毁。现在普遍采用的生成会话密钥的方法是基于公钥加密算法,首先一方向另一方提供自己的证书,另一方通过可信的第三方进行身份认证;然后其中一方通过另一方的公钥加密一个随机数(作为会话密钥)并传给另一方,最终另一方通过自己的私钥进行解密,得到会话密钥。在以后的会话过程中将采用这个会话密钥进转载 2013-11-29 18:20:58 · 6302 阅读 · 0 评论 -
Java中的值传递和地址传递
JAVA传递参数有两种方式:值传递和引用传递值传递是传递数据:如基本数据类型都是值传递引用传递是把形参和实参的指针指向了堆中的同一对象,对象的引用和数组的引用。实参,Java的基本数据类型,如int,double等在函数的参数传递时,传递的是副本。String也属于这一范畴。形参,而如果是对象,则传递的是引用。public class MainActivity ex原创 2014-01-09 22:08:34 · 6726 阅读 · 0 评论 -
Arrays.sort、Comparable与Comparator两个接口的作用
有的时候需要对数组里的element进行排序。当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在数组元素比较少的时候为何不用? Sorting an Array 1. 数字排序 int[] intArray = new int[] { 4, 1, 3, -23 }; Arrays.sort(intArray); 输出: [-转载 2014-02-21 17:22:51 · 7800 阅读 · 1 评论 -
List、ArrayList、Vector及map、HashTable、HashMap的区别
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。Collection是List和Set两个接口的...原创 2014-02-21 18:03:18 · 1040 阅读 · 0 评论 -
Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。public class Outer{private static int i = 1;private int j=10;private int k=20;转载 2014-02-21 18:29:19 · 1234 阅读 · 0 评论 -
java基础面试题
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Father p = new Son(2); p.f原创 2014-02-17 17:36:09 · 945 阅读 · 0 评论 -
String的compareTo()方法返回值
compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度. 例: String s1 = "abc"; String s原创 2014-02-21 17:01:57 · 1583 阅读 · 0 评论 -
对象排序之Comparator,Comparable接口区别(华为面试题)
现有一个类person有三个属性,分别是name,age,sex。有一个List对象,保存了很多person对象的实例,请编写一个函数,对List里的实例进行排序。条件:18岁以上的人,排序顺序:性别,年龄,姓名全部降序。给了个类,要求编写一段代码,给以下类型的数据排序(按index降序排): public class A{ public int index ; publ转载 2014-02-21 17:31:02 · 2018 阅读 · 0 评论 -
Java之HashMap
1、什么是 HashMap?什么时候选择HashMap?说到容器,你肯定会想到 Java中对象存储容器还有ArrayList,LinkedList,HashSet等,而HashMap 相对这些容器来说,可以理解为多了一层指向关系,可以用指定Key找到指定Value。打个比方:现在有一个Java Bean 用于存储职员的信息,字段包括(职员姓名,职员年龄,职员身高,职员体重,职员...转载 2013-05-02 10:49:30 · 1189 阅读 · 0 评论 -
重载和重写的区别
override->重写(=覆盖)、overload->重载、polymorphism -> 多态重载overloading1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载是一个类中多态性的一种表现。2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传转载 2014-03-11 15:50:22 · 1048 阅读 · 0 评论 -
outStream.flush()
flush() 是清空的意思。一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了 close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush(),先清空数据。fos.flush();可不是摆转载 2014-03-27 18:18:30 · 6250 阅读 · 1 评论 -
FileInputStream与BufferedInputStream、FileInputStream与FileReader区别
FileInputStream与BufferedInputStream区别:FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现转载 2014-03-27 20:38:07 · 5743 阅读 · 0 评论 -
Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些题目,很多人感到很迷惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些转载 2014-03-25 09:01:07 · 1131 阅读 · 0 评论