java--java、javaWeb
FixedStarHaHa
这个作者很懒,什么都没留下…
展开
-
JVM笔记Class类文件结构详解
理解class文件结构会让很多迷惑的地方豁然开朗关注微信公众号【测试开发分享站】后台输入class文件结构,即可领取对应xmind文件测试人员懂得开发技能,逐渐成为我们在职场和行业脱颖而出的法宝。希望我们在测试和开发方面分享的经验让你每天都成长和进步,更早成为测试开发方面的牛人~...原创 2020-03-02 16:23:20 · 141 阅读 · 0 评论 -
(四十五.1)wait、notify使用
转自:https://blog.csdn.net/zhujiangtaotaise/article/details/56281264wait、notify以及notifyAll都是Object对象的方法,他们必须在被 synchronized 同步的方法或代码块中调用,否则会报错。 调用wait方法会使该线程进入等待状态,并且会释放被同步对象的锁。 notify操作可以唤醒一个因执行wa...转载 2019-07-24 21:39:27 · 248 阅读 · 0 评论 -
(二十六.1)java String 在内存中如何存储的?
在java中,内存分成两个区域stack 和 heap , stack 用于运行(包括变量引用和逻辑运行),heap 用于存储变量实体。java中对String对象特殊对待,所以在heap区域分成了两块,一块是String constant pool,用于存储java字符串常量对象,另一块用于存储普通对象及字符串对象。其实可以这样推理:堆中存放对象,因为String是引用类型,所以必定将Str...原创 2019-07-18 13:40:20 · 470 阅读 · 0 评论 -
(四.2)值传递和引用传递
转自:https://juejin.im/post/5bce68226fb9a05ce46a0476在对(四.1)JVM内存的划分及职能 简单理解后,解释值传递和引用传递值传递:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容。publicstaticvo...转载 2019-07-17 22:42:11 · 110 阅读 · 0 评论 -
(四.1)JVM内存的划分及职能
转自:https://juejin.im/post/5bce68226fb9a05ce46a0476Java语言本身是不能操作内存的,它的一切都是交给JVM来管理和控制的,因此Java内存区域的划分也就是JVM的区域划分,在说JVM的内存划分之前,我们先来看一下Java程序的执行过程,如下图:虚拟机栈是Java方法执行的内存模型,栈中存放着栈帧,每个栈帧分别对应一个被调用的方法,方...转载 2019-07-17 22:12:45 · 145 阅读 · 0 评论 -
(五十八)java中是否存在内存泄漏问题
一、概念:无用对象、未被引用对象、被引用对象我们需要先了解一下对象在内存中的状态。下面的这张图就解释了什么是无用对象以及什么是未被引用对象。上面图中可以看出,里面有被引用对象和未被引用对象。未被引用对象会被垃圾回收器回收,而被引用的对象却不会。未被引用的对象当然是不再被使用的对象,因为没有对象再引用它。然而无用对象却不全是未被引用对象。其中还有被引用的。就是这种情况导致了内存泄漏...原创 2019-03-20 17:07:42 · 309 阅读 · 0 评论 -
(五十七)什么是GC
GC:Garbage Collection一、GC的任务释放垃圾占有的内存,防止内存泄漏。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。二、怎样定义垃圾①引用计数算法是一种简单且低效的方法。每当一个地方引用它(对象)时,计数器+1;引用失效时,计数器-1;计数值=0——不可能再被引用。缺点:但是不能解决相互引用问题,所以JVM没有用...原创 2019-03-20 16:05:12 · 218 阅读 · 0 评论 -
(五十六)join()方法的作用是什么
在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了。join()方法的作用是等待线程对象的销毁。...原创 2019-03-20 10:57:29 · 915 阅读 · 0 评论 -
(五十五)什么是守护线程
①Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。 ②只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者。 ③User和D...原创 2019-03-20 10:34:02 · 112 阅读 · 0 评论 -
(五十四)终止线程的方法有哪些
一、stop() :存在读取数据不一致问题stop方法过于暴力,会直接终止线程,并且立即释放这个线程所持有的锁,而这些锁是用来维持对象一致性的,如果此时,写线程写入的数据正写入一半,并强行终止,那么对象就会被写坏,同时由于锁已经被释放,另外一个等待该锁的读线程就顺利成章的读到了这个不一致的问题,而且这种问题很难被定位。二、suspend():可能产生死锁死锁是指两个或两个以上的进程在执...原创 2019-03-20 10:00:10 · 172 阅读 · 0 评论 -
(五十三)sleep()与yield()方法区别
对于sleep或者wait方法,他们都将进入特定的状态,伴随着状态的切换,也就意味着等待某些条件的发生,才能够继续,比如条件满足,或者到时间等但是yield方法不涉及这些事情,他针对的是时间片的划分与调度,所以对开发者来说只是临时让一下,让一下他又不会死,就只是再等等一、让其他线程运行,是否考虑优先级sleep()方法不会考虑优先级,因此会给低优先级的线程机会yield()会给同级...原创 2019-03-19 21:12:17 · 179 阅读 · 0 评论 -
(五十二)sleep()与wait()方法区别
一、对锁的处理机制不同sleep()方法:不释放锁正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行,不涉及线程间的通信(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);你想要让当前线程不考虑其他线程的感受,只是自己暂时不干活而已wait()方法:释放锁wait()方法则是指当前线程让自己暂时...原创 2019-03-19 20:51:16 · 171 阅读 · 0 评论 -
(四十五.2)多线程同步的实现方式之Lock
Java 1.5之后,新增了Lock接口来实现锁的功能,它提供了与synchronized类似的同步功能,只是在使用的时候需要手动的获取和释放锁,虽然缺少了synchronized隐式释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized不具备的同步特性。Lock使用也很简单,以下是简单的使用方式。public class Coun...原创 2019-03-19 20:09:28 · 227 阅读 · 0 评论 -
(五十一)volatile有什么作用
一、volatile作用①保证内存可见性通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。当一个变量被volatile修饰时,任何线程对它的写操作都会立即刷新到主内存中,并且会强制让缓存了该变量的线程中的数据清空,必须从主内存重新读取最新数据。主存可见性的原因:上图为Java内存模型,由上图...原创 2019-03-19 15:45:16 · 5594 阅读 · 3 评论 -
(五十)java序列化与反序列化
一、序列化与反序列化 Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。 我们都知道,在进行浏览器访问的时候,我们看到的文本、图片、音频、视频等都是通过二进制序列进行传输的,那么如果我们需要将Java对象进行传输的时候,是不是也应该先将对象进行序列化?答案是肯定的,我们需要先将Java对象进行序列化,然后通过网络,IO进行传输,...原创 2019-03-19 11:23:23 · 92 阅读 · 0 评论 -
(四十九)反射
一、反射的定义在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。一、java反射的作用(功能)①得到一个对象所属的类②获得一个类所具有的成员变量...原创 2019-03-19 09:43:56 · 108 阅读 · 0 评论 -
(四十八)getString()与getObject()方法有什么区别
JDBC提供了getString()、getInt()、getData()等方法从ResultSet中获取数据。当查询结果集中的数据量较小时,不用考虑性能,使用这些方法完全能够满足需求,但是当查询结果集中的数据量非常大时,则会抛出异常:OrcelException为处理:ORA-01000:maximum open cursors exceedde(以Orcel数据库为例)。而通常情况下,使用...原创 2019-03-08 16:33:36 · 492 阅读 · 0 评论 -
(四十六)JDBC处理事务采用什么方法
一、commit()、rollback() 一个事务由一条或多条对数据库操作的SQL语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行完毕了,整个事务才会被提交给数据库。 在JDBC中,一般是通过commit()方法或rollback()方法来结束事务的操作。其中commit()表示完成对事务的提交,rollback()方法表示完成事务回滚,多用于在处理事务...原创 2019-03-06 20:07:10 · 916 阅读 · 0 评论 -
(四十五)如何通过JDBC访问数据库
JDBC: Java DataBase Connectivity (java 数据库连接)作用:用于在java程序中实现数据库操作功能,它提供了执行SQL语句、访问各种数据库的方法,并为各种不同的数据库提供了统一的操作接口。(创建与数据库连接、发送SQL语句到数据库、处理数据并查询结果)步骤:①加载JDBC驱动器import java.sql.DriverManager;...原创 2019-03-06 18:16:05 · 110 阅读 · 0 评论 -
(四十五)多线程同步的实现方法有哪些
一、synchronized关键字https://blog.csdn.net/jiangshangchunjiezi/article/details/88118063此关键字修饰方法,当方法体规模很大时,会影响程序的执行效率,为了提高效率,出现了synchronized块二、wait()方法与notify()方法wait、notify使用:https://blog.csdn.net...原创 2019-03-06 15:04:20 · 1130 阅读 · 0 评论 -
(四十五)run()方法与start()方法有哪些区别
一、直接调用run,被当做普通方法,不能实现多线程start()方法能异步调用run()方法---不用等run执行完毕,就可执行下面的代码(以下代码深刻理解此句话)直接调用run()方法却是同步的----要等run()执行完毕,才能执行下一个run();程序中只有主线程这一个线程,即执行路径只有这一条run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完...原创 2019-03-05 14:12:36 · 277 阅读 · 0 评论 -
(四十四)如何实现java多线程
java虚拟机允许应用程序并发地运行多个线程。一、继承Thread类,重写run方法Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方式就是通过Thread类的start()方法 public class Demo extends Thread { Demo(String name) { super(name...原创 2019-03-05 10:50:10 · 179 阅读 · 0 评论 -
(四十三)同步和异步有什么区别
一、同步机制(共享资源同一时刻只允许一个线程访问:排他性)在多线程环境中,经常会遇到数据的共享问题,即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某一时刻只能被一个线程使用,否则,程序的运行结果将会不可预料(比如每个线程都有修改权限,同时改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会要求按顺序来修改)同步机制举例:多个线程同时对同一数据进行写操...原创 2019-03-04 16:26:52 · 756 阅读 · 0 评论 -
(四十二)什么是线程?它与进程有什么区别?为什么要使用多线程
关系:区别:线程:又称为“轻量级进程”,是操作系统能够进行运算调度的最小单位,被包含在进程中,是进程中实际运行单位。进程:系统进行资源分配和调度的基本单位。进程与线程区别:进程是资源分配的最小单位,线程是程序执行的最小单位 进程创建与切换:进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,这种操作非常昂贵。而线程是共享进程中的数据的,使用...原创 2019-03-04 14:55:56 · 1667 阅读 · 1 评论 -
(四十)用自定义作为HashMap或HashTable的key需要注意哪些问题
一、HashMap=数组+链表数组存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的查找很快,为O(1) 特点:寻址容易,插入和删除困难链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但是时间复杂度很大O(n) 特点:寻址困难,插入和删除容易HashMap:就是将两者综合,做一种寻址容易,插入、删除也容易的数据结构HashMap用的是链地...原创 2019-03-03 18:04:57 · 501 阅读 · 0 评论 -
(三十九)HashMap、HashTable、TreeMap、WeakHashMap有什么区别
java.util.Map接口三个实现类:—Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的JDK1.0—-HashMap:底层是哈希表数据结构,允许使用null键null值,该集合不同步JDK1.2—–TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。与Set很像。Set底层就是使用了Map集合遍历的两...原创 2019-03-03 15:15:03 · 169 阅读 · 0 评论 -
(三十八)ArrayList、Vector、LinkedList有什么区别
ArrayList、Vector、LinkedList类均在java.util包中,均为可伸缩数组,即可以动态改变长度的数组。一、ArrayList、Vector相同点:①都是基于存储元素的Object[] array来实现的,他们会在内存中开辟一块连续的空间来存储(因为连续,所以可以用下标来访问元素,同时索引数据的速度比较快)②插入元素时需要移动容器中的元素,所以虽数据的...原创 2019-02-28 15:09:05 · 133 阅读 · 0 评论 -
(三十六)Java中的堆和栈有什么区别
堆和栈是存放数据的地方。变量分为基本类型和引用类型存放内容:栈存放基本类型变量和对象的引用,堆存放对象和数组 线程共享:栈是线程私有、堆是所有线程共享一、栈1、主要作用:存放基本类型与对象的引用变量基本类型:https://blog.csdn.net/jiangshangchunjiezi/article/details/874504082、特点存取速度比较快,栈数据可以共...原创 2019-02-26 16:25:52 · 151 阅读 · 0 评论 -
(三十四)System.out.println()方法使用需要注意哪些问题
该方法默认接收一个字符串类型的类型作为参数。当然,在使用时,可以传递任意能够转换为String类型的变量作为参数(例如int,或者一个实现toString方法的自定义类)public class Person { private String name; private int age; public Person(int age,String name){ this.a...原创 2019-02-25 21:09:07 · 1469 阅读 · 0 评论 -
(三十三)Java Socket是什么
TCP:socket、ServerSocket:https://blog.csdn.net/jiangshangchunjiezi/article/details/76268429网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为Socket。Socket也称为套接字,可以用来实现不同虚拟机或者不同计算机之间的通信。①在java语言中,Socket分为两种类型:面...原创 2019-02-23 11:56:34 · 197 阅读 · 0 评论 -
(三十二)管理文件和目录的类是什么
File f=new File("C:\\Users\\ASUS\\Desktop");//通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 if(!f.exists())//判断对象对应的文件是否存在 { System.out.println("文件是空的"); return ; } File[] fileList=f.listFiles(...原创 2019-02-23 00:22:28 · 208 阅读 · 0 评论 -
(三十一)javaIO流的实现机制是什么
一、字节流读写(FileInputStream、FileOutputStream)public static void main(String[] args) throws IOException { //字节流的读 inputstream FileInputStream fis=new FileInputStream("C:/Users/ASUS/Desktop/Woman...原创 2019-02-21 23:21:52 · 513 阅读 · 0 评论 -
(三十)异常
在程序运行中(非编译),任何中断正常流程的因素都被认为是异常。按照面向对象思想,Java语言用Java类来描述异常。所有异常类的祖先类为java.lang.Throwable类,它的实例表示具体的异常对象,可以通过throw语句抛出。Throwable类提供了访问异常信息的一些方法,常用的方法包括:(1)getMessage() 返回String类型的异常信息。(2)printStackT...原创 2019-02-19 22:01:38 · 259 阅读 · 0 评论 -
finally代码在方法有return时执行情况
一、finally代码在return前执行①finally代码一定会执行②return表示退出函数体,返回函数调用处综合①②finally代码会在return前执行即程序在执行到return时会首先将返回值存储在一个指定的位置,其次去执行finally块,再返回。public static int testFinally() { try{ return 1; ...原创 2019-02-19 19:29:03 · 634 阅读 · 1 评论 -
(二十八)length属性与length()方法有什么区别
1.length属性是针对Java中的数组来说的,要求数组的长度可以用其length属性; 2.length()方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法; 3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看! 这个例子来演示这两个方法和一个属性的用法public static void main(St...转载 2019-02-18 23:16:04 · 312 阅读 · 0 评论 -
(二十七)java中数组是不是对象、数组初始化方式
一、数组是指具有相同类型的数据的集合,他们一般有固定长度,并在内存中占据连续的空间java中数组有自己的属性(比如length),也可以有一些方法可以被调用(比如clone)。根据对象的特点是封装了一些数据,同时提供了一些属性和方法,从这个角度讲,数组是对象int[] a={1,2}; int[][] b=new int[2][4]; String[] s={"a","b...原创 2019-02-18 21:58:56 · 193 阅读 · 0 评论 -
(二十六)String、StringBuffer、StringBuilder、StringTokenizer区别
一、String 和 StringBuffer:(二十六.1)java String 在内存中如何存储的?①String类型和StringBuffer类型的主要性能区别:String是不可变的对象,因此每次在对String类进行改变的时候都会生成一个新的string对象,然后将指针指向新的string对象,所以经常要改变字符串长度的话不要使用string,因为每次生成对象都会...原创 2019-02-17 15:48:31 · 189 阅读 · 0 评论 -
(二十五)“==”、equals、hashcode有什么区别
一、“==”运算符比较基本数据类型的值或两个引用变量是否指向同一对象是否相同,只能用“==”运算符二、equals()方法每一个java类都继承自Object,所以每个类都有equals方法。所以在没有覆盖equals方法情况下,equals与"=="运算符比较的是两个对象(引用)。Object 中equals方法并没有被final修饰,所以子类可以覆盖这个方法,达到比较的是数据具...原创 2019-02-17 12:58:58 · 105 阅读 · 0 评论 -
(二十四)字符串创建与存储的机制是什么
在java中字符串的声明与初始化有如下几种方式: 1. String a = new String("abc"); 2. String b = "abc" 这两种方式结果都是一样的,但是实现机制却不相同,接着往下看:String a = "hello";String b = "hello"与String c = new String("hello");String d = new...原创 2019-02-16 21:36:55 · 291 阅读 · 0 评论 -
(二十三)不同数据类型的转换有哪些规则
一、隐式转换:从低精度到高精度byte<short<char<int<long<float<double 注意:①char类型的数据转换成高级类型(int、long),会转换为其对应的ASCII码②byte、char、short类型的数据在参与运算或自动转换成int,但是“+=”运算时,就不会产生类型的转换char c='a'; int...原创 2019-02-16 21:05:37 · 693 阅读 · 0 评论