java学习笔记(面试必备)

2023-11-02

1.java的四大特性:抽象,继承,封装,多态

抽象的概念:

这里我先补充一下对象的概念,在java中世界万物皆对象,对象就是客观存在的事物,比如一个人,一支笔。而抽象就是将对象的某些细节和特征抽取出来,用程序代码表示,抽取出来的东西一般我们称之为类或者接口,因此抽象分为两个方面,数据抽象和过程抽象。

数据抽象:就是将事物的共同的特征用程序代码表示,通过抽象成为对象的属性,比如一个人有年龄,性别,身高,这些代表人的特征通过数据抽象成人这个对象的属性

过程抽象:就是将事物的行为用程序代码表示,通过抽象成为对象的方法,比如一个人,他要吃饭,他要跑步,这类的行为通过过程抽象成为人这个对象的方法。

继承的概念:

继承的单词是extends,但我个人更趋向理解为扩展,所以我认为继承就是从已有的类派生出新的类,新的类吸收已有的类的属性和方法,并且能够扩展的新的能力(新的方法)

比如车这个类,有车轮,车灯这些属性,但是车又可以派生出小轿车和大卡车两个类,这两个类都有车轮,车灯这些属性,并且为小轿车添上一个后备箱,为大卡车添上一个大货箱,

这添加出来的就是扩展后的功能。

继承的意义就是提高代码的复用性,如果两个类存在is-a的关系(比如绵羊属于羊这一类)子类继承父类的方法和属性,并且可以扩展自己的方法,如果需要实现父类中的同名方法必须进行重写。但是继承缺点很明显,第一点它打破了封装的概念,父类向子类暴露了实现细节。并且父类改变了,子类也要进行相应的改变,耦合度太高。所以大多情况下都会选择使用接口。

多态的概念:

在说多态之前,我要说下接口。在Java中接口是一个全部由抽象方法组成的集合,接口需要用interface定义,里面只能有抽象的方法和常量。接口就是体现事物扩展的不同功能,接口的不同实现方式就是多态,打个比方,有一个插座接口,声明了充电这个方法,插座可以用来插充电宝,插手机,插电风扇进行充电,至于怎么充,就是充电宝手机电风扇内部具体的实现。这种不同的实现方式就是接口多态的体现。一个类可以实现多个接口,实现类实现接口就必须重写这个接口里所有的方法,接口只做方法的声明,具体的实现由实现类去做。

接口对比继承就是降低耦合性,就那刚才那个插座接口举例,及时你电风扇内部充电功能改变了,都不会影响到插座充电的功能。

2.String类和StringBuffer

String类为final类型的,不可继承,存储的是字符串常量,是不可改变的。

(每次赋值都是重新创建一个对象)

而StringBuffer类存储的是字符串变量,可以对字符串进行一系列的操作。

比如String str = “abc”,str = str + “de” ,输出的虽然是abcde,但是实际情况是,我们先创建一个String对象str,并把“abc”赋值给str,然后str = str+”de”执行的是,JVM创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了。

StringBuffer类是线程安全的,适合多线程在字符缓冲区进行操作的情况。

 

3.异常

我们知道,在java中,所有异常对象都是throwable类的一个实例,我们不仅可以使用java内置的异常类,还可以自定义自己的异常类。

在异常中分为两种,一种是error,另一种是Exception。

Error:描述了java运行时系统的内部错误和资源耗尽错误。比如我们熟知的stackoverflowError栈溢出,其实就是错误,也不需要捕获。

Exception又可以分为runtimeException 和其他异常

runtimeException指的是在java虚拟机运行正常的情况下,由于程序部分代码错误所产生的异常,而程序本身没有问题,比如我们熟知的数组下标越界异常indexofboundException和空指针nullpointException异常

其他异常就是因I/O错误导致的异常:(也称编译时异常,就是我们写代码时必须要抛出的异常,比如SQLException,IOException,ClassNotFoundException ,FileNotFoundException文件未找到异常。

对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。

非运行时异常(检查异常,编译异常,必须要处理的异常)

java编译器强制程序员必须进行捕获处理,比如常见的IOExeption和SQLException。对于非运行时异常如果不进行捕获或者抛出声明处理,编译都不会通过。

4.进程和线程

关于进程和线程的概念,不同角度有不同的方法,我目前认为,进程就是程序在计算机上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位,说起这个资源分配和调度,原本都是由进程完成的,每个进程所能访问的内存都是圈好的,一人一份,互不影响,由于cpu越来越牛逼,因此在进程的基础上,再次细分,线程就是进程的一个实体,就是cpu调度和分配的基本单位,它本身基本上不拥有资源,只拥有一小部分必不可少的资源(如程序计数器),因此一个进程拥有多个线程,同一个进程中的多个线程之间可以并发执行。

就像火车和车厢,进程就是火车,车厢就是线程。

比如火车拥有多个车厢(一个进程拥有多个线程)

不同进程之间的数据很难共享,但是不同线程之间的数据很易共享(比如火车换乘很麻烦,但是从一个车厢到另一个车厢很简单)

进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)

 

5.java多线程

Java的线程有五种状态

新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();

就绪状态(Runnable):当调用线程对象的start()方法,线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。值得一提的是,就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:

1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;

2.同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;

3.其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期

 

线程的创建和启动有两种方式

一种是继承Thread类,一种是实现runable接口,但是在java1.5以后提出了一个叫callable接口,他的不同之处在于有返回值和可以抛出异常,便于我们处理异常信息。

什么是线程安全?Vector是一个线程安全类吗?

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。很显然你可以将集合类分成两组,线程安全和非线程安全的。Vector 是用同步方法来实现线程安全的, 而和它相似的ArrayList不是线程安全的。

如何停止一个线程?

目前来说并没有提供相应的api来停止线程,而是当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程

 

6.Servlet的生命周期

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法ÿ

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java学习笔记(面试必备) 的相关文章

  • JVM工具-jstack

    jstack 打印线程堆栈信息 支持支持本地java进程 core文件以及远程java进程 命令格式 jstack options pid jstack options executable core jstack options serv
  • 根据图片地址得到文件流

    得到文件流 param url 图片地址 return public static byte getFileStream String url try URL httpUrl new URL url HttpURLConnection co
  • 字符“&”在XML文件中需要被转义

    今天弄Mybatis的配置文件时 因为这样一条语句
  • 什么是多态?对于多态的理解....

    什么是多态 我们都知道面向对象有四个基本特性 抽象 封装 继承 多态 概括可以理解为 抽象 封装 继承 是多态的基础 多态是抽象 封装 继承的表现 多态 是Java中非常重要的一部分 简单理解 不同类的 对象 对同一消息 做出了不同的响应就
  • 使用jemeter进行压力测试关注的指标

    一 压测设置 线程数 并发数量 能跑多少量 具体说是一次存在多少用户同时访问 Rame Up Period in seconds 表示JMeter每隔多少秒发动并发 理解成准备时长 设置虚拟用户数需要多长时间全部启动 如果线程数是20 准备
  • 动力节点老杜java基础视频笔记第一章 学前准备 (1)

    课堂截图 为什么使用截图工具 在听课的过程中 有的时候老师操作的比较快 通过截图的方式将老师的操作保存下来 以便后期的操作 另外截图之后的图片也可以用于笔记的记录 在笔记当中最好采用图文并茂的方式 这样更加利于知识的回顾 使用哪个截图工具
  • MVC发展历程及思想

    两种web应用程序的开发模式 model 1 JSP JavaBean JSP负责 页面显示 页面跳转 调用Javabean处理数据 处理请求 JavaBean负责 数据封装保存 数据处理逻辑 适用场景 model 1 方式适合开发业务逻辑
  • 7.java类中的方法

    1 类中的方法 1 实例方法 格式 访问限制修饰符 方法的返回值数据类型 方法名称 参数列表 方法体 解释 访问限制修饰符 public 缺省的 方法的返回值数据类型 就是方法的执行结果类型 有返回值时 方法的返回值数据类型一定是方法执行结
  • java Map集合

    目录 一 介绍 二 HashMap 三 TreeMap 四 LinkedHashMap 一 介绍 Java中的Map是一种键值对的集合数据类型 用于存储无序的 不重复的键值对 它提供了快速的查找和访问功能 可以根据键来获取值 常见的Map实
  • [透彻]为什么要前后端分离?

    前后端分离的意义 前后端分离 已成为互联网项目开发的业界标准使用方式 前后端分离 会为以后的大型分布式架构 弹性计算架构 微服务架构打下坚实的基础 核心思想 前端页面调用后端的restuful api接口 并使用json数据进行交互 服务器
  • JAVA,异常

    异常概念 通常大家认为异常就是错误 但这个错误有很多种 1 语法错误 2 JVM虚拟机错误 3 平台错误 4 程序运行错误 平台或者资源或者逻辑 数值等错误 常见的异常 1 java lang NullPointerException 空指
  • java 泛型 作用与定义

    1 泛型方法的定义和使用 public static void main String args throws ClassNotFoundException String str get 哈士奇 world System out print
  • 第一个java程序helloworld代码的编写

    第一个java程序helloworld代码的编写 文章目录 第一个java程序helloworld代码的编写 toc 一 项目 二 认识JVM JRE和JDK 2 1 JVM是什么 2 2 JVM的主要功能和作用 2 3 JRE和JDK J
  • FastJson 之 List<Map>转化成对应List<Object>

    List
  • SQL中join group by having max() 时转Linq

    本来开发时有一个分组聚合的脚本 比较复杂 为了笔记效果 所以将脚本做一个简化 本来库里有两个表TableA和TableB 两个表的主键做如下关联 TableA的主键ID为TableB的外键Aid SELECT a Id a Name b I
  • SM2加解密、签名验签

    导论 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 在我们国家商用密码体系中被用来替换RSA算法 国产SM2算法 是基于ECC的 但二者在签名验签 加密解密过程中或许有些许区别 目前鄙人还不太清楚 后期有机会的话
  • 如何做单元测试

    如何做单元测试 一 定义 二 为什么要做单元测试 三 单元测试用例 四 阿里单元测试规约 五 测试框架的使用 Junit 下面以Junit4 为例来介绍 1 1 什么是Junit 1 2 为何使用Junit 1 3 Junit的快速入门 导
  • java基础之HashSet详解

    HashSet详解 HashSet是基于HashMap实现的一个单列存储的集合类 将所有的数据存在HashMap的key值中 而value全部使用一个Object对象存储 继承关系 public class HashSet
  • Java处理SSH-免密登录

    前提 需要测试主机之间能够免密 配置ssh请自行百度 jar包 旧版 com jcraft jsch 仅支持老版的密钥格式 旧版本 RSA
  • 黑豹程序员-字符串中查找出重复的字符串

    Collections frequency codeList element 字符串element 在codeList集合中重复的次数 List

随机推荐

  • clickhouse修改默认密码

    1 明文密码 vim etc clickhouse server users xml 找到下面的语句 增加明文密码
  • Centos7 配置Java开发(JDK)环境

    1 下载Java安装包 在Oracale Java 官网找到对应的JDK安装包 现在最常用 JDK1 8 而且现在的系统大都是64位 这里就以LInux64位为例 2 上传到Centos虚拟机 云主机中 将下载好的jdk for linux
  • Java入门(7)——循环和debug 调试

    循环 while 循环 格式 int i 0 初始化条件 while i lt 10 判断条件 System out println i 循环体 i 控制条件 执行顺序 第一次 第二次 第三次 最后一次 条件满
  • Vue2(路由)

    目录 一 路由原理 hash 二 路由安装和使用 vue2 三 路由跳转 四 路由的传参和取值 五 嵌套路由 六 路由守卫 最后 一 路由原理 hash 单页应用的路由模式有两种 1 哈希模式 利用hashchange 事件监听 url的h
  • Pentaho Data Integration:执行job提示 无法找到作业的开始点

    问题 无法找到作业的开始点 解决办法 如下图 选择 发送邮件 软件下载地址 Pentaho Community Edition Download Hitachi Vantara 找到Pentaho Data Integration Base
  • 在vue项目中 , 将字符串转数组 split()

    console log this cityItem fullName console log this cityItem fullName split 在vue项目中 遇到一个常用的方法split 因为常用 又容易记混 所以在此记录 spl
  • 推荐几个好用的代码工具

    SourceTree git 管理工具 postman 接口调试工具 FinalShell shell 链接工具
  • Salient Obejct Detection(SOD)综述

    论文链接 https arxiv org abs 2008 00230 仓库链接 https github com taozh2017 RGBD SODsurvey 介绍 显著目标检测 Salient Obejct Detection 是模
  • 微服务架构下认证和鉴权理解

    认证和鉴权 从单体应用到微服务架构 优势很多 但是并不是代表着就没有一点缺点了 微服务架构 意味着每个服务都是松散耦合的 因此 作为软件工程师和架构师 我们在分布式架构中面临着安全挑战 微服务对外开放的端点 我们称之为 API 单体应用只需
  • leetcode-62不同路径

    题目 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 问总共有多少条不同的路径 示例 输入 m 3 n 2 输出
  • 缩减Docker镜像大小的方法

    对于刚接触容器的人来说 他们很容易被自己构建的 Docker 镜像体积吓到 我只需要一个几 MB 的可执行文件而已 为何镜像的体积会达到 1 GB 以上 本文将会介绍几个奇技淫巧来帮助你精简镜像 同时又不牺牲开发人员和运维人员的操作便利性
  • python的知识点关键词_Python基础知识的集合,知识点,合集

    概念 Python有什么优势 解释性语言 语法简单易懂 可读性强 自动内存管理 基于引用计数法等可以对垃圾进行自动回收 内存池机制 提前申请好小内存 内存分配效率更高 让程序员可以更加专注代码的实现 有很多库可以调用 站在巨人的肩膀上简单的
  • 软件工程导论06-面向数据结构的分析与设计

    面向数据结构的分析与设计 典型方法 Jackon方法 Warnier方法 主要特点 以信息对象及其操作作为核心进行需求分析 认为复合信息对象具有层次结构 并且可按顺序 选择 重复三种结构分解为成员信息对象 提供由层次信息结构映射为程序结构的
  • 在Linux中使用shell指令完成文件打包、压缩、解压缩

    一 写一个1 sh脚本 将以下内容放到脚本中 在家目录下创建目录文件dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中 把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2 tar xz 再
  • 为什么ViewGroup的onDraw()方法不执行

    问题 ViewGroup onDraw不执行的原因 怎么让ViewGroup onDraw执行 android代码一直在优化 我看了几个版本的源码 目前 我用的是API30的源码 再去看ViewGroup为什么不走onDraw 的时候 已经
  • 移动端和PC端有什么区别

    1 PC考虑的是浏览器的兼容性 而移动端开发考虑的更多的是手机兼容性 因为目前不管是android手机还是ios手机 一般浏览器使用的都是webkit内核 所以说做移动端开发 更多考虑的应该是手机分辨率的适配 和不同操作系统的略微差异化 2
  • Http 与 Socket 区别

    HTTP 超文本传输协议 首先它是一个协议 并且是基于TCP IP协议基础之上的应用层协议 TCP IP协议是传输层协议 主要解决数据如何在网络中传输 HTTP是应用层协议 主要解决如何包装数据 HTTP协议详细规定了浏览器与服务器之间相互
  • 腾讯QQ Web Service 接口

    导读 腾讯QQ在线状态 WEB 服务 Endpoint http www webxml com cn webservices qqOnlineWebService asmx Disco http www webxml com cn webs
  • 在家就可以做的三个冷门副业,时间自由,零基础也可轻松上手

    大多数人感到困惑的原因本质上是他们没有计划和设定自己的职业目标 从现在开始保持自律 学会认真完成每一件小事 一步一步地完成它 你可以一起解决你的困惑 今天和大家分享 蝶衣王 VIP栏目发布的三个小项目可以在家里做 一 抄书 简单到有手 就是
  • java学习笔记(面试必备)

    1 java的四大特性 抽象 继承 封装 多态 抽象的概念 这里我先补充一下对象的概念 在java中世界万物皆对象 对象就是客观存在的事物 比如一个人 一支笔 而抽象就是将对象的某些细节和特征抽取出来 用程序代码表示 抽取出来的东西一般我们