java
文章平均质量分 94
weixin_41205419
这个作者很懒,什么都没留下…
展开
-
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来...原创 2020-04-11 19:19:54 · 152 阅读 · 0 评论 -
Java创建线程的四种方式
1.继承Thread类实现多线程 run()为线程类的核心方法,相当于主线程的main方法,是每个线程的入口 a.一个线程调用 两次start()方法将会抛出线程状态异常,也就是的start()只可以被调用一次 b.native生明的方法只有方法名,没有方法体。是本地方法,不是抽象方法,而是调用c语言方法 registerNative()方法包含了所有与线程...转载 2020-04-11 14:28:09 · 155 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度计算
一、算法的时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随问题n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。 这样用大写O...转载 2020-04-11 11:38:15 · 387 阅读 · 0 评论 -
ThreadLocal 与 Synchronized区别
相同:ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。不同:Synchronized同步机制采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问;而ThreadLocal采用了“以空间换时间”的方式,每一个线程都提供了一份变量,因此可以同时访问而互不影响。以时间换空间->即枷锁方式,某个区域代码或变量只有一份节省了内存,但是会形成很多线程等待...原创 2020-04-11 11:36:32 · 363 阅读 · 0 评论 -
构造函数,set()方法和建造者模式(Builder)
如何实现在Computer 中创建一个静态内部类 Builder,然后将Computer 中的参数都复制到Builder类中。 在Computer中创建一个private的构造函数,参数为Builder类型 在Builder中创建一个public的构造函数,参数为Computer中必填的那些参数,cpu 和ram。 在Builder中创建设置函数,对Computer中那些可选参数进行赋值,返回值为Builder类型的实例 在Builder中创建一个build()方法,在其中构建Computer的转载 2020-04-11 11:34:43 · 2394 阅读 · 1 评论 -
算法的时间与空间复杂度(一看就懂)
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算...转载 2020-04-11 11:32:19 · 260 阅读 · 0 评论 -
静态代码块,构造代码块,构造函数执行执行顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。回到顶部构造函数public HelloA(){//构造函数 }关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。2.构造...转载 2020-04-07 16:49:52 · 183 阅读 · 0 评论 -
java实现单链表逆置
class LNode 2 { 3 public LNode next; 4 public int data; 5 } 6 /*逆置链表*/ 7 class Nizhi 8 { 9 private static LNode head = new LNode();;10 private static LNode node;11 priva...原创 2020-04-07 14:54:18 · 938 阅读 · 0 评论 -
JVM DVM ART 联系区别
1、JVM是什么?JVM是Java Virtual MachineJVM本质是软件,是计算机硬件的一层软件抽象,屏蔽了底层实现的差异Java编译的程序会生成JVM字节码,字节码需要通过JVM被翻译成机器指令JVM本质作用是将平台无关的.class内的字节码翻译成平台相关的机器码-实现跨平台2、Dalvik虚拟机(DVM)是什么是android中使用的虚拟机。所有的Android程序...转载 2019-02-21 21:59:14 · 696 阅读 · 0 评论 -
ThreadLocal的简单使用及实现的原理
ThreadLocal简介ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。ThreadLocal的简单使用下面的例子中,创建了两个线程,然后线程对各自的局部变量进行递增的操作。每个线程中的局部变量的初始值都是100。ThreadLocal中...转载 2019-02-21 16:56:43 · 463 阅读 · 0 评论 -
进程和线程的区别
1、首先是定义进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。2、一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。3、线程是一种轻量级的进...转载 2018-12-11 22:48:06 · 95 阅读 · 0 评论 -
synchronized 与 Lock 的区别
java中使用锁的两个基本工具是 synchronized 和 Lock。 一直很喜欢synchronized,因为使用它很方便。比如,需要对一个方法进行同步,那么只需在方法的签名添加一个synchronized关键字。 // 未同步的方法public void test() {}// 同步的方法pubilc synchronized void test() {} ...转载 2018-12-11 22:43:25 · 96 阅读 · 0 评论 -
java动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。一、代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象...转载 2018-12-16 18:01:07 · 164 阅读 · 0 评论 -
Volley 分析
通过一个小栗子开始咱们的源码分析RequestQueue queue = Volley.newRequestQueue(this); String url ="http://www.baidu.com"; StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new...转载 2018-12-16 16:55:23 · 114 阅读 · 0 评论 -
HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录 一、什么是哈希表 二、Ha...转载 2018-12-16 16:48:29 · 152 阅读 · 0 评论 -
android引用分析
Java/Android中有四种引用类型,分别是:Strong reference - 强引用Soft Reference - 软引用Weak Reference - 弱引用Phantom Reference - 虚引用不同的引用类型有着不同的特性,同时也对应着不同的使用场景。1.Strong reference - 强引用实际编码中最常见的一...转载 2018-12-09 23:29:26 · 168 阅读 · 0 评论 -
JAVA基础
java三大特性1.封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式好处:将变化隔离、便于使用、提高复用性、提高安全性原则:将不需要对外提供的内容隐藏起来;把属性隐藏,提供公共方法对其访问2.继承:提高代码复用性;继承是多态的前提注:①子类中所有的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可自...原创 2018-04-04 18:20:09 · 584 阅读 · 0 评论 -
数据库操作
一、基础1、说明:创建数据库CREATE DATABASE database-name 2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始 备...原创 2018-04-04 18:19:51 · 163 阅读 · 0 评论 -
java一些面试题算法
//冒泡 相邻比较交换位置int[] arr={3,5,1,7,6};//从小到大for(int j=0;j<arr.length-1;j++){for (int i = 0; i < arr.length-1; i++) {if(arr[i]>arr[i+1]){int temp=arr[i];arr[i]=arr[i+1];arr[i+1]=temp;...原创 2018-04-04 18:19:44 · 1168 阅读 · 0 评论 -
java的设计模式
java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。设计模式遵循的原则有6个:1、开闭原则(...转载 2018-04-04 18:19:37 · 148 阅读 · 0 评论 -
Java面试题集
谈谈对Java多态的理解?多态是指父类的某个方法被子类重写时,可以产生自己的功能行为,同一个操作作用于不同对象,可以有不同的解释,产生不同的执行结果。多态的三个必要条件:继承父类。重写父类的方法。父类的引用指向子类对象。静态方法与静态成员变量可以被继承吗,为什么?静态方法与静态成员变量可以被继承,但是不能被重写。它对子类隐藏,因此静态方法也不能实现多态。为什么Java里的匿名内部类只能访问fina...转载 2018-04-17 11:45:43 · 120 阅读 · 0 评论 -
10 大排序算法总结
查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会要求...转载 2018-04-17 11:56:49 · 141 阅读 · 0 评论 -
java 反射
java反射概念反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们.(特别注意运行时)Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)获得任何一个类的字节码。包括接口、变量、方法等信息。还可以让我们在运行期实例化对象,通过调用get/set方法获取变量的值p...转载 2018-04-16 18:32:56 · 167 阅读 · 0 评论 -
深层次面试题
java一. 类的加载过程,Person person = new Person();为例进行说明。 1).因为new用到了Person.class,所以会先找到Person.class文件,并加载到内存中;2).执行该类中的static代码块,如果有的话,给Person.class类进行初始化;3).在堆内存中开辟空间分配内存地址;4).在堆内存中建立对象的特有属性,并进...转载 2018-04-16 18:32:38 · 847 阅读 · 0 评论 -
Android 面试题整理
Java部分1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。2.XML包括哪些解释技术,区别是什么?DOM和SAXDOM将文档解...转载 2018-05-08 15:42:53 · 1057 阅读 · 0 评论 -
Android面试题-okhttp内核剖析
基本使用从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的.建议大家下载 OkHttp 源码之后,跟着本文,过一遍源码。通过小栗子开启今天的源码分析:OkHttpClient client = new OkHttpClient();String run(String url) throws IOException { Request request = ne...转载 2018-12-07 15:48:44 · 164 阅读 · 0 评论 -
死锁
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻...转载 2018-12-14 08:55:00 · 138 阅读 · 0 评论 -
JVM内存分区及用途
ava虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域:1、程序计数器2、Java虚拟机栈3、本地方法栈4、Java堆5、方法区下面分别介绍各个内存分区及它们...转载 2018-12-09 20:12:14 · 2137 阅读 · 0 评论 -
ArrayList 与 LinkedList的异同点
ArrayList:底层是数组结构,查询快,增删慢,异步,初始容量为10。LinkedList:底层是链表结构,增删快,查询慢,异步,初始容量为0,linkedList 是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好,有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端。 LinkedList不是线程安全的,...转载 2018-04-02 17:43:12 · 958 阅读 · 0 评论