java
java
浩丶木
这个作者很懒,什么都没留下…
展开
-
java面经总结-jvm相关
一.谈谈你对java的理解平台无关性在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class)。在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。同一份Java源代码在不同的平台上运行,它不需要做任何的改变,并且只需要编译一次。而编译好的字节码,是通过JVM这个中间的“桥梁”实现跨平台的,JVM是与平台相关的软件,它能将统一的字节码翻译成该平台的机器码。gc特性语言特性面向对象类库异原创 2022-03-16 12:54:35 · 260 阅读 · 1 评论 -
HashMap源码分析
HashMap内部的结构它可以看做是数组和链表结合组成的符合结构,数组被分为一个个桶,通过哈希值决定了键值对在这个数组的寻址;哈希值相同的键值对,则以链表形式存储。如果链表大小超过阈值,图中的链表就会被改造成树形结构。从非拷贝构造函数的实现来看,这个表格(数组)似乎并没有在最初就初始化好,仅仅设置了一些初始值而已。所以,也许HashMap是按照lazy-load的原则来进行初始化。put方法:如果表格是null,resize方法会负责初始化它,这从tab = resize()可以看出。resiz原创 2021-12-25 13:58:27 · 324 阅读 · 0 评论 -
乐观锁与悲观锁
乐观锁:每次拿到数据的时候都不会进行上锁,在更新的时候会判断一下在此期间该数据有没有进行变更。实现机制乐观锁的实现主要有两种,一种是版本号控制,另一种是CAS算法实现。版本号控制:一般是在一个数据表中加上一个数据版本号字段,表示数据被修改的次数,当数据被修改的时候,该版本号字段会进行加1的操作。当某一个线程要对一个字段进行修改的时候,会在读取数据的同时读取版本号的值,在提交更新的时候,若版本号的值与之前的版本号的值不同的时候,便会重新进行更新操作。CAS机制:线程在读取数据时不进行加锁,在准备原创 2021-11-20 09:06:00 · 60 阅读 · 0 评论 -
设计模式的六大设计原则
一.单一职责原则每个类的功能都必须单一,不能多功能二.里氏替换原则1.子类必须完全实现父类的方法2.子类可以有自己的个性,拥有自己的特定的方法3.覆盖或实现父类的方法的时候输入的参数可以被方法4.覆盖或实现父类的方法的时候输出的结果可以被缩小三.依赖倒置原则1.接口或抽象类不依赖于实现类2.实现类依赖接口或抽象类四.接口隔离原则1.客户端不依赖它不需要的接口2.类之间的依赖关系应该建立在最小的接口上五.迪米特法原则一个类应该对自己需要耦合或调用的类知道最少六.开闭法则软件实体原创 2021-10-14 14:42:14 · 37 阅读 · 0 评论 -
java注解
注解也叫做元数据,即一种描述数据的数据。解析一个注解往往有两种形式,一种是编译器的直接扫描,一种是运行期的反射。编译器的扫描指的是编译器在对java代码编译成字节码的过程中会检测到某个类或者方法被一些注解修饰,这时它就会对于这些注解进行某些处理。注解的用途1.生成文档2.编译检查3.编译时动态处理4.运行时动态处理元注解1.retention,解释说明这个注解的存活时间RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。Retentio原创 2021-10-12 09:38:41 · 45 阅读 · 0 评论 -
java学习笔记-封装
封装:不需要关心代码的复杂实现,只需要通过一个简单的入口就可以访问了。另外,将安全级别较高的数据封装起来,外部人员不能随意访问,这样可以来保证数据的安全性。作用:1.保证内部结构的安全2.屏蔽复杂,暴露简单实现封装的步骤1.属性私有化 private2.1个属性对外提供两个set和get方法。外部程序只能通过set方法修改,只能通过get来获取,可以在set方法中设立关卡来保证数据的安全性。set和get方法都是实例方法,不能带static不带static 的方法称为实例方法,实例方法的调用原创 2021-01-24 21:01:32 · 62 阅读 · 1 评论 -
全局变量局部变量实例变量静态变量的区别
全局变量(成员变量)在类中,方法体外所定义的变量叫做全局变量。作用域覆盖整个程序范围的变量。该变量包含了实例变量和静态变量。局部变量在类中,方法体内所定义的变量叫做局部变量。作用域只到该方法结束后便释放掉。局部变量要先被赋值才能进行计算。实例变量在类中所定义,通过创建对象所能访问的变量叫做实例变量。在创建对象的时候变量就已经被赋初值。静态变量(类变量)被static所修饰的变量,当虚拟机启动时即加载器变量到内存中,不需要创建对象...原创 2021-01-21 10:28:29 · 196 阅读 · 0 评论 -
面向过程和面向对象之间的差别
面向过程特点:1.注重步骤,注重的是实现这个功能的步骤。2.注重因果,因为什么,而才有什么。面向过程中没有对象的概念。只是实现这个功能的步骤以及因果关系。缺点面向过程最主要的是每一步与每一步的因果关系,其中a步骤因果关系到b步骤,a和b联合起来形成一个子模块,子模块和子模块之间有因为因果关系结合到一起,假设其中任何一个因果关系出现问题(错误),此时整个系统的运转都会出现问题。(代码和代码之间的耦合度非常高,扩展力很差)优点对于小型的项目,采用面向过程的方式进行开发,效率很高。不需要前期进行原创 2021-01-20 16:56:53 · 89 阅读 · 0 评论 -
Java学习笔记-Lambd表达式
LambdaLambda表达式的格式。(形式参数)->(代码块)形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可。-> :代表指向动作。代码块:方法体的内容。Lambda省略模式public class Demo { public static void main(String[] args) { useAddable((int x,int y)->{ return x+y; });原创 2020-12-31 19:56:26 · 136 阅读 · 0 评论 -
Java学习笔记-反射
类加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化,如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者类初始化。1.类的加载就是指将class文件读入内存,并为之创建一个java.lang.Class对象。任何类被使用的时候,系统都会为之加了一个java.lang.Class的对象2.类的连接验证阶段:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。准备阶段:负责为类的类原创 2020-12-31 11:00:57 · 51 阅读 · 0 评论 -
Java学习笔记-网络编程
网络编程计算机网络:是指将地理位置不同的具有独立功能的多态计算机以及外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程:在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换。网络编程三要素IP地址,端口,协议。IP地址分为两大类IPv4 ,IPv6InetAddress端口:设备上应用程序的唯一标识协议:计算机网络中,连接和通信的规则被称为网络通信协议UDP协议TCP协议U原创 2020-12-30 20:47:41 · 55 阅读 · 0 评论 -
Java学习笔记-线程
线程实现多线程1.进程是正在进行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。2.线程是进程中的单个顺序控制流,是一条执行路径。单线程:一个进程如果只有一条执行路径,则称为单线程程序。多线程:一个进程如果有多条执行路径,则称为多线程程序。3.多线程的实现方式方式1:继承Thread类。run()是用来封装被线程执行的代码;run()方法和start()方法的区别run()封装线程执行的代码,直接调用,想当与普通方法的调用。start()启动线原创 2020-12-29 20:51:24 · 50 阅读 · 0 评论 -
java学习笔记-IO流
IO流主要内容java.io.File类的使用:计算机操作系统中的文件和文件夹IO原理及流的分类流的理解:通过程序把一个图放到一个文件夹,把图片转化为一个数据集,把这些数据一点一点传到文件夹,这个传递的过程就类似水的流动,我们就可以称这个整体的数据集是一个数据流。文件流:数据流的读写都是基于文件的操作缓冲流:数据流的读写都是基于内存的操作转换流,标准输入输出流,打印流,数据流,对象流,随机存取文件流一般来说,我们说IO流的分类是按照数据类型来分的,我们可以读懂里面的内容,就是用字符流,否则就原创 2020-12-28 20:23:41 · 65 阅读 · 0 评论 -
java学习笔记-泛型
泛型将类型由原来的具体的类型参数化,然后再使用/调用的时候传入具体的类型。定义格式<类型>:制定一种类型的格式。这里的类型可以看成是形参<类型1,类型2…>:制定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参。将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型。泛型的好处1.把运行时期的问题提前到了编译时期2.避免了强制类型转换。...原创 2020-12-25 15:40:24 · 78 阅读 · 0 评论 -
java学习笔记-Collection
集合java集合类存放于java.util包中,是一个用来存放对象的容器。1.集合只能存放对象。比如你存一个int型数据,其实他是自动转换成integer类之后存入的,java中每一种基本类型都有对象的引用类型。2.集合存放的是多个对象的引用,对象本身还是放在堆内存中。3.集合可以存放不同类型,不限数量的数据类型。CollectionSet,List,Map三种大体系。HashSet是Set接口的典型实现,大多数时候使用Set集合时都是用这个实现类。哈希值是JDK根据对象的地址或者字原创 2020-12-23 11:07:58 · 67 阅读 · 0 评论 -
java学习笔记-异常
异常异常:就是程序出现了不正常的情况;异常体系:Error:严重问题,不需要处理Exception:称为异常类,他表示程序本身可以处理的问题;RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。非RuntimeExtion:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了;JVM的默认处理方案把异常的名称,异常原因及异常出现的位置等信息输出在了控制台;程序停止执行;异常处理try…catch…try{ int []arr={1,2,3原创 2020-12-21 22:05:44 · 74 阅读 · 0 评论 -
java学习笔记-简述数据结构
数据结构之栈数据进入栈模型的过程称为:压/进栈数据离开栈模型的过程称为:弹/出栈栈顶元素先出栈,栈底元素先入栈,是一种数据先进后出的模型。数据结构之队列数据从后端进入队列模型的过程称为:入队列数据从前端离开队列模型的过程称为:出队列队列是一种数据先进先出的模型数据结构之数组数组是一种查询快,增删慢的模型查询数据通过索引定位,查询任意数据耗时相同,查询效率高;删除数据的时候,要将原始数据删除,同时后面每个数据前移,删除效率低;添加数据的时候,添加位置后的每个数据后移,再添加元素,原创 2020-12-22 21:30:45 · 74 阅读 · 0 评论 -
java学习笔记-内部类
内部类内部类的特性内部类作为外部类的成员,可以声明为finalpublic class A{ int i; final class B{ }}内部类可以声明为private或者protected;public class A{ int i; private class B{ }}内部类可以声明为static,但是此时就不能再使用外部类的非static的成员变量。public class A{ int i; static class B{ //不能使用外部类的非原创 2020-12-20 20:56:02 · 78 阅读 · 0 评论 -
java学习笔记-接口
接口有些时候必须从几个类中派生出一个子类,继承他们所有的属性和方法。但是,java不支持多重继承。有了接口,就可以得到多重继承的效果。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。一个类可以实现多个接口,接口也可以继承其他的接口。接口的特点1.接口中的所有成员变量都默认是由public static final修饰的。2.接口中的所有方法都默认的是由public abstract修饰的。3.接口没有构造器;4.接口采用多层继承机制。接口中的原创 2020-12-20 20:26:19 · 65 阅读 · 0 评论 -
java学习笔记-抽象类
抽象类用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法的时候,该方法叫做抽象方法;抽象方法只有方法的声明,没有方法的实现。以分号结束;含有抽象方法的类必须被声明为抽象类。抽象类不能被实例化。public abstract class A{ }抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,依旧为抽象类。为什么抽象类不可以使用final关键字声明?final是最终,他修饰的类最终的类,不能被继承。原创 2020-12-20 19:52:50 · 92 阅读 · 0 评论 -
java学习笔记-包装类以及toString
包装类基本数据类型包装成包装类—装箱通过包装类的构造器实现:字符串转换成基本数据类型;int i=500;Integer i=new Integer(i);通过包装类的parsexxx(String s)静态方法;Float f=Float.parseFloat("12.1");通过字符串参数构造包装类对象;Float f=new Float("4.56");获得包装类对象中包装的基本类型变量—拆箱Integer i=new Integer(112);int i0=i.intV原创 2020-12-19 19:39:11 · 129 阅读 · 1 评论 -
java学习笔记-static和final
static实例变量,只有实例化之后才能使用,属于实例化对象的一部分;类变量,不用实例化,直接类名.属性名就可以使用,是类的一部分,被是所有这个类的实例化对象所共享,也可以叫做静态变量;使用范围在java类中,可用static修饰属性,方法,代码块,内部类;被修饰后的成员具备以下的特点1.随着类的加载而加载:类加载之后,静态的方法或者属性就能使用了。2.优先对象的存在3.修饰的成员,被所有对象共享4.访问权限允许时,可不创建对象,直接被类调用static的访问特点非静态的成员方法能访原创 2020-12-19 15:26:23 · 90 阅读 · 1 评论 -
java学习笔记-常用的API
常用的API1.MathMath包含执行基本数字运算的方法如果没有构造方法,看类的成员是否都是静态的,如果是,通过类名就可以直接调用。2.System3.Object所有的类都直接或者间接继承Object类所以,因为他们的顶级父类Object只有无参构造方法,子类的构造方法默认访问你的是父类的无参构造方法;...原创 2020-12-19 09:55:44 · 79 阅读 · 1 评论 -
java学习笔记-多态
多态实现多态的前提1.需要存在继承或者实现关系;2.要有覆盖操作多态性,是面向对象中最重要的概念,在java中有两种体现;1.方法的重载和重写;重载(本类中的同名方法,体现相同的名称方法实现不同的逻辑)重写(子类对父类方法的覆盖,子类可以使用和父类相同的方法名,覆盖掉父类的逻辑,父类的方法,想要修改逻辑,但是有别的代码在调用父类的方法,可以考虑用子类继承父类,重写父类的方法。)2.对象的多态性子类可以看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型java引用变量有两个类原创 2020-12-19 08:30:16 · 165 阅读 · 1 评论 -
java学习笔记-继承
继承继承的格式public class 子类 extends 父类{}父类又被称为基类,超类;子类又被称为派生类;子类的特点可以使用父类的成员;子类可以拥有自己的特有的成员;继承特点提高了代码的复用性(多个类相同的成员可以放到同一个类中)提高了代码的维护性(如果方法的代码需要修改,只需要修改父类或者子类的代码即可)但是类的耦合性增强了,当父类发生变化的时候,子类也不得不跟着变化,削弱了子类的独立性。什么时候用继承如果满足其中一个类是一个类的一种,便说明他们存在继承的关系,这个时候就原创 2020-12-17 11:18:53 · 107 阅读 · 0 评论 -
java学习笔记-String
StringString类代表字符串,java程序中所有的双引号字符串都是String类的对象。字符串的特点1.字符串不可变,他们的值在创建后不能被更改。2.虽然String的值是不可变的,但是他们可以被共享。String构造方法通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。字符串的比较基本类型的“”比较原创 2020-12-15 11:17:40 · 107 阅读 · 0 评论 -
java学习笔记-构造方法
类的成员之三:构造方法特征他具有与类相同的名称;他不声明返回值类型;不能被修饰,不能有返回语句;作用创建对象,给对象进行初始化;new对象的根本原理,就是通过类的构造方法;注意点java中,每个类都至少有一个构造方法;默认构造方法的修饰符与所属类的修饰符一致;一旦显示定义了构造方法,则系统不再提供默认构造方法;一个类可以创建多个重载的构造方法;父类的构造方法不可被子类继承;...原创 2020-12-14 08:25:10 · 62 阅读 · 0 评论 -
java学习笔记-修饰符
四种访问权限的修饰符原创 2020-12-13 21:24:43 · 77 阅读 · 1 评论 -
java学习笔记-getxxx()和setxxx();
关于getxxx() setxxx()方法1.为什么要使用get()和set()方法private关键字使属性私有化,不是什么都能够随随便便就能进行访问,所以我们要使用set和get方法进行访问;2.set() 和 get()的使用set是传入值get是得到值不管你的属性(Xxx)是什么只要:public void setXxx(String Xxx) {this.Xxx = Xxx;}public String getXxx() {return Xxx;}所以不管什么属性都可以通原创 2020-12-13 21:22:33 · 785 阅读 · 0 评论 -
java学习笔记-方法
**方法重载**多个相同名称的方法如果想在一个类中共存,只要他们的参数个数或者参数类型不同即可,参数类型的顺序不一样也可以;而且方法重载与返回值的类型无关;**方法的参数传递****方法**,必须由其所在类豁对象调用才有意义。若方法含有参数**形参**:方法声明时的参数;**实参**:方法调用是实际传给形参的参数值;**JVM的内存模型****栈stack**基础数据类型,对象的引用(对象的地址);**堆heap**所有的对象;**方法区method**所有的类和static变量;基本原创 2020-12-12 20:34:41 · 77 阅读 · 0 评论 -
关于java中static方法不能直接调用非static方法的问题
一个方法用static修饰,便是静态方法或类方法。static修饰的内容是随着类的加载而加载的,且只加载一次。它存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。它优先于对象存在,所以,可以被所有对象共享。一个方法的加载是先进入栈区分配内存再给该方法中的对象在堆中开辟空间,赋予初值;由于static方法在装载分配内存空间首先完成,比构造方法早,此时非static属性和方法还没有完成初始化,访问一个内存中不存在的东西也就会报错。所以,在static方法内部无法直接调用非static方法原创 2020-12-10 22:18:52 · 1811 阅读 · 1 评论 -
java学习笔记-面向对象
面向对象的编程java是由诸多个不同功能的类构成的,而java中的类又是由类中的成员组成的。类中的成员分为属性和行为;属性:对应类中的成员变量;行为:对应类中的成员方法;对象:由类具体实例化的变量;...原创 2020-12-10 21:39:37 · 78 阅读 · 0 评论 -
java学习笔记-数组
数组一维数组声明 :数据类型 【】变量名存放多个相同数据类型的数据。动态初始化数组int【】i=new int【4】;声明一个能放4个数据的数组;静态初始化数组int 【】i =new int 【】{1,2,3,4};使用数组中的元素 变量名【0】为第一个元素,变量名【1】为第二个元素,以此类推。数组元素的默认初始化:当数组被动态初始化之后,数字类型的默认值为0;引用数据类型的默认值为null;字符默认值为空字符布尔值为false多维数组声明 :数据类型 【】【】变量名第一个括号为原创 2020-12-09 22:24:34 · 57 阅读 · 0 评论 -
java学习笔记-程序流程控制
顺序结构程序从上到下逐行执行,中间没有任何判断和跳转。分支结构根据条件,选择性地执行某段代码;if-elseif-else ifswitch语句if-elseif(表达式)(表达式为true值才会执行花括号中的代码,若为假则执行else中的代码。){执行代码块;}else{ 执行代码块;}**if-else if **if(表达式){执行代码块;}else if(表达式){执行代码块;}else if(表达式){执行代码块;}(if else语句与i原创 2020-12-09 11:27:07 · 63 阅读 · 0 评论 -
java学习笔记-运算符
运算符算术运算符加减乘除‘+’ ‘-’ ‘*’ ‘/’取模’%‘ 就是求余数,++和–++a,a值先+1再运算,a++,a值先运算再加1;–a和a–是一个意思,只不过是减号运算;赋值运算符=为赋值号,不是等于号;在使用扩展运算符的时候,变量在参与运算时会把结果强制转换为当前变量的类型。...原创 2020-12-09 10:16:45 · 111 阅读 · 0 评论 -
java学习笔记
**关键字**定义:被java语言赋予了特殊的含义,用作专门用途的字符串。特点:关键字中所有字母都为小写。**标识符**java对各种变量,方法和类等要素命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫标识符。规则:1.由英文字母,0-9,_或$组成;2.数字不可以开头3.不可以使用关键字,但能包含关键字4.严格区分大小写,长度无限制5.标识符不能包含空格**命名规范**包名:所有字母都小写类名,接口名:首字母大写变量名,方法名 第一个单词首字母小写,第二个单词首字母大原创 2020-12-07 22:19:37 · 61 阅读 · 0 评论 -
java常识
基础常识软件开发软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。人际交互方式图形化界面简单直观,使用者易于接受,容易上手。命令行方式:需要有一个控制台,输入特定的指令,让计算机完成一些操作。比较麻烦,需要记录一些命令。java语言的特性1.易学2.面向对象3.分布式4.健壮性,完善性5.安全6.体系结构中立的:可以跨平台运行。7.解释型8支持多线程。java语言运行机制两种核心机制;1.java虚拟机,jvm2.垃圾回收机制gcjdk,j原创 2020-12-03 22:22:02 · 87 阅读 · 0 评论 -
语c文件操作
文件操作c语言的文件主要有两种,一种为文本文件,一种为二进制文件。打开和关闭文件1.打开文件。 fopen();用于打开文件并返回文件指针。打开文本文件:“r”:只能从文件中读数据,该文件必须先存在,否则打开失败“w”:只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件“a”:向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾“r+”:可读/写数据,该文件必须先存在,否则打开失败“w+”:可读/写数据,用该模式打开新建一个文原创 2020-12-01 17:09:11 · 264 阅读 · 0 评论 -
java学习笔记-this关键字以及super关键字
java学习笔记(方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,不是成员变量。如果形参与成员变量不同命,不带this修饰的变量是成员变量。)this关键字作用:把方法中的局部变量赋值给类中的成员变量的方法关键字。this修饰的变量用于指代成员变量为了解决局部变量隐藏成员变量用this...原创 2020-11-14 16:19:51 · 157 阅读 · 0 评论 -
java学习笔记-helloworld
小白开始学习java(有错误的地方请大佬指出)第一节helloworld(1).案例的编写新建一个文本文档,修改名称同时要有文件后缀为.java。注:这里对于一些小白来说(大佬可跳过)这里需要展开文件详情才更容易更改后缀名。那么之后就开始写入代码。(一定要保存呦ctrl+s)***(2).文件的编译和执行1.win+r打开命令提示符2.找到对应的java文件的磁盘目录再找到你刚刚写的文件的目录(后面会补充命令符的操作)3.输入javac 对应的文件名.java+回车这个时候你对应原创 2020-11-01 10:02:40 · 121 阅读 · 0 评论