java回归基础复习干货总结十

news/2024/4/26 13:20:50/文章来源:https://blog.csdn.net/LSP522/article/details/129180572
  1. 说说List,Set,Map三者的区别?

    List(用于顺序):List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象。
    Set(注重独一无二的性质):不允许重复的集合,不会有多个元素引用相同的对象。
    Map(用Key来搜索):使用键值对存储,Map会维护与Key有关联的值。俩个Key可以引用相同的对象,但Key不能重复。典型的Key是String类型,但也可以是任意的对象。
    
  2. 类的生命周期?

    类的生命周期包括几个部分:加载、连接、初始化、使用和卸载,其中前三部是类的加载过程。
    加载,查找并加载类的二进制数据,在java堆中也创建一个java.lang.class类的对象。
    连接,连接又包含三块内容:验证、准备、初始化。1)验证,文件格式、元数据、字节码、符号引用验证;2)准备,为类的静态变量分配内存,并将初始化为默认值;3)解析,把类中的符号引用转换为直接引用。
    初始化:为类的静态变量赋予正确的初始值
    使用,new出的对象程序中使用
    卸载,执行垃圾回收
    
  3. 有哪些垃圾收集算法?

    GC最基础的算法有三种:标记-清除算法、复制算法、标记-压缩算法,我们常用的垃圾回收器一般都采用分代收集算法标记-清除算法:“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。复制算法:“复制”的收集算法,它将可用内存按容量划为大小相等的两块,每次只能使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另一块上面。然后再把已经使用过的内存空间一次清理掉。标记-压缩算法
    分代收集算法。。
    
  4. 产生死锁的四个必要条件?

    互斥条件:一个资源每次只能被一个线程使用
    请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放
    不剥夺条件:进程已经获得的资源,在未使用完成之前,不能强行剥夺
    循环等待条件:诺干个线程之间形成一种头尾相接的循环等待资源关系
    
  5. 如何避免死锁?

    指定获取锁的顺序?
    比如某个线程只有获得A锁或B锁才能对资源进行操作,多线程条件下,获得锁的顺序是一定的,可以规定,只有获得A锁的线程才有资格获取B锁,按顺序获取锁就可以避免死锁。
    
  6. 为什么重写equals必须重写hashCode?

    如果重写equals不重写hashCode它与散列集合无法正常工作。会引起与散列集合(HashMap、HashSet、HashTable、ConcurrentHashMap)的冲突
    

设计模式复习巩固

  1. 说说什么是单例模式?

    答:单例模式是一种常用的软件设计模式,在这个模式中,单例模式对象的类必须保证只有一个实例存在。
    优点:不会频繁的创建和销毁对象,这样可以节省系统的资源。几种单例模式的写法:
    饿汉式:线程安全
    懒汉式:非线程安全
    双重检查锁:线程安全
    
    package Singleton;/** @Author: jun* @Date:2023/2/19 15:31* @概述:*//*** 饿汉式* 1.类加载时就初始化,比较浪费内存,不能够延迟加载* 2.基于classloader机制避免多线程的同步问题,线程安全* 3.无需上锁,调用效率高*/
    public class SingletonByHunger {//私有实例,类初始化就加载private static SingletonByHunger instance = new SingletonByHunger();//私有构造方法private SingletonByHunger(){};//公共和静态的获取实例方法public static SingletonByHunger getInstance() {return instance;}
    }
    package Singleton;/** @Author: jun* @Date:2023/2/19 15:47* @概述:*//*** 懒汉式* 此方法线程不安全,但可实现延迟加载*/
    public class SingletonByLazy {//私有化实例,初始化时不加载,即延迟加载private static SingletonByLazy instance;//私有构造方法private SingletonByLazy(){};//公共获取实例方法(线程不安全),这里没有上锁public static SingletonByLazy getInstance() {if (instance == null){instance = new SingletonByLazy();}return instance;}
    }
    package Singleton;/** @Author: jun* @Date:2023/2/19 15:52* @概述:*//*** 懒汉模式* 通过关键字synchronized声明公共的获取实例的方法getInstance(),可以确保线程安全,能做到延迟加载,缺点是效率低*/
    public class SingletonByLazyAndLock {//私有化实例,初始化时不加载private static SingletonByLazyAndLock instance;//私有构造方法private SingletonByLazyAndLock(){};//公共获取实例方法(线程安全,调用效率低)public synchronized static SingletonByLazyAndLock getInstance() {if (instance == null){instance = new SingletonByLazyAndLock();}return instance;}
    }
    package Singleton;/** @Author: jun* @Date:2023/2/19 16:03* @概述:*//*** 双重检查锁* 双重判断检查,延迟加载* 线程安全* 要求是jdk1.5+*/
    public class SingletonByDoubleCheckLock {//私有实例,volatile关键字,禁止指令重排private volatile static SingletonByDoubleCheckLock instance;//私有构造private SingletonByDoubleCheckLock(){};//公共获取实例方法(线程安全)public static SingletonByDoubleCheckLock getInstance() {if (instance == null){//第一次检查,加锁之前判断是否为空,可以确保instance不为空的情况下,不加锁直接返回实例synchronized (SingletonByDoubleCheckLock.class){if (instance == null){//第二次检查instance = new SingletonByDoubleCheckLock();}}}return instance;}
    }

代码转载自:https://blog.csdn.net/qq_41863849/article/details/106299726

  1. 说说你对代理模式的理解?

    代理模式是给某一个对象提供一个对象,并由代理对象控制对原对象的引用优点:
    代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度
    可以灵活的隐藏被代理对象的部分功能和服务,也增加了额外的功能和服务缺点:
    由于使用了代理模式,因此程序的性能没有直接调用性能高
    使用代理模式提高了代码的复杂度
  2. 说说工厂模式。

    简单工厂模式又叫静态工厂方法模式,就是建立一个工厂类,对实现了同一个结构的一些类进行实例的创建。比如,一台咖啡机就可以理解为一个工厂模式,你只需要按下想喝咖啡品类的按钮,它就会给你生产一杯相应的咖啡,你不需要管它内部的具体实现,只需要告诉它你的需求就可以。优点:
    1.工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品,简单工厂模式通过这种方式实现了对责任分割,它提供了专门的工厂类用于创建对象。
    2.客户端无须知道所创建的具体产品类和类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。缺点:
    1.不易扩展
    2.较为复杂,不易维护
    
  3. 抽象工厂模式

    抽象工厂模式是在简单工厂的基础上将未来可能需要修改的代码抽象出来,通过继承的方式让子类去做决定。
    
  4. 说一下使用Spring的优势?

    Spring通过DI、AOP和消除样板代码来简化企业级Java开发
    Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的邻域,如Web服务,REST,移动开发以及NoSQL
    独立于各种应用服务器,基于Spring框架的使用,可以真正实现WriteOnce,Run AnyWhere
    SpringIoc容器降低了业务对象替换的复杂性,提高了组件之间的解耦
    Spring高度开放,
    
  5. Spring是如何简化开发的?

    基于POJO的轻量级和最小侵入性编程
    通过依赖注入和面向接口实现松耦合
    基于切面和惯例进行声明式编程
    通过切面和模板减少样板式代码
    
  6. Spring、SpringMVC、SpringBoot的区别。

    Spring和SpringMVC:
    1.spring是一个一站式的轻量级java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的web层,业务层、持久层都提供了多种配置解决方案
    2.SpringMVC是Spring基础之上的一个MVC框架,主要是处理web开发的路径映射和视图渲染,属于Spring框架中WEB层开发的一部分SpringMVC和SpringBoot:
    1.SpringMVC属于一个企业级WEB开发的MVC框架,涵盖面包括前端视图开发,文件配置,后台接口逻辑开发,XML、config等配置文件相对比SpringBoot更加繁琐。
    2.SpringBoot框架相对于SpringMVC框架来说,更专注于开发微服务后台接口,不开发前端视图,相比于SpringMVC,配置更加简化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_73006.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开学第一周,超30所高校系主任选择与百度飞桨联办校赛

经历了一场特殊而漫长的假期,各地校园又恢复了往日的热闹,重新焕发出勃勃生机,师生们在一声声久别重逢的暖心问候中,迎来了2023年春季学期。 以赛促学蔚然成风 开学季是校内竞赛策划及启动的最佳时机之一,越来越多的老…

JVM17GUI工具

3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 命令行工具或组合能帮您获取目标 Java 应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等&#xff0…

TEMU联盟计划用意何在?做推广达人真的能收入满满吗?

据东哥近期了解,Temu在北美市场表现十分火爆,甚至冲上了AppStore下载榜第一名。Temu在美国市场上采用了类似PDD的病毒式传播策略,以实惠的产品和折扣吸引消费者并动员普通人大量传播链接和App下载,所以有了TEMU联盟计划&#xff0…

ArcGIS导出AI或EPS格式的地图图片并在Adobe Illustrator中继续编辑

本文介绍在ArcGIS下属的ArcMap软件中,将绘制好的地图导出为.ai或者.eps格式文件,并在Adobe Illustrator软件中进一步编辑地图,并最终导出为图片格式的结果文件的方法。 在ArcMap软件中绘制各类地图可以说非常方便,绘制得到的地图也…

深圳/东莞/惠州师资比较强的CPDA数据分析认证

深圳/东莞/惠州师资比较强的CPDA数据分析认证培训机构 CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证,它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者,具有广泛的社会认知度和权威性。 无论是地方政府引进人才、…

synchronized和ReentrantLock有什么区别呢?

第15讲 | synchronized和ReentrantLock有什么区别呢? 从今天开始,我们将进入 Java 并发学习阶段。软件并发已经成为现代软件开发的基础能力,而 Java 精心设计的高效并发机制,正是构建大规模应用的基础之一,所以考察并发…

Golang学习Day1

😋 大家好,我是YAy_17,是一枚爱好网安的小白。本人水平有限,欢迎各位大佬指点,欢迎关注 😁,一起学习 💗 ,一起进步 ⭐ 。⭐ 此后如竟没有炬火,我便是唯一的光…

诚邀您体验人工智能AI

近期,人工智能(AI)领域动作频频,OPENAI公司Chat GPT的出现,标志着人工智能的研究与应用已经进入了一个崭新的发展阶段,国内腾讯、阿里巴巴、百度、易网、国外微软、谷歌、苹果、IBM、Amazon,等互…

电子技术——反馈放大器的分析方法总结

电子技术——反馈放大器的分析方法总结 第一种也是最简单的估算方法,直接拿出反馈网络,计算 β\betaβ 则假设在 AβA\betaAβ 无限大的情况下有 Af≃1/βA_f \simeq 1/\betaAf​≃1/β 。开环法。比第一种方法更能精确的估计 AAA 和 β\betaβ 的值。系…

自动化测试优势和劣势

一、自动化测试概述 软件自动化测试是相对手工测试而存在的,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,节省人力、时间或硬件资源,提高测试效率。 二、自动化测试优势&劣…

BP神经网络参数总结,BP神经训练窗口详解,基于BP神经网络的火灾识别,1000案例之17

目录 摘要 BP神经网络参数设置及各种函数选择 参数设置 训练函数 传递函数 学习函数 性能函数 显示函数 前向网络创建函数 BP神经网络训练窗口详解 训练窗口例样 训练窗口四部详解 基于B P神经网络的火灾识别 数据集 MATLAB编程BP神经网络代码,并附有GUI窗口 效果图…

Python-项目实战--贪吃蛇小游戏-贪吃蛇功能实现(4)

5.贪吃蛇功能的实现在这一小节,我们就以完成的游戏框架为基础,加入贪吃蛇的功能,完成整个游戏的开发本小节的知识重点包括:贪吃蛇类的设计定义贪吃蛇类添加蛇身体绘制和移动身体改变贪吃蛇的方向贪吃蛇吃食物贪吃蛇的死亡5.1贪吃蛇类的设计我…

java -cp 错误:找不到或无法加载主类

java -cp 错误:找不到或无法加载主类 1.问题场景 在一个项目开发中,我需要写一个 windows的bat脚本,需要在里面 调用 SpringBoot项目生成的jar包,我在调用 classes下面的 jar时 通过 调用 jar包 去调用 jar包中的某个 .java类 …

吃鸡用什么蓝牙耳机效果好?手游吃鸡公认最好的几款蓝牙耳机

蓝牙耳机的作用很多,几乎每个人都需要一副很棒的耳机在通勤或锻炼途中使用,并且玩游戏也少不了它,手游近几年十分的流行,下面整理了几款性能不错的蓝牙耳机。 第一款:南卡小音舱蓝牙耳机 蓝牙版本:5.3 发…

树莓派CM4基础设置

安装系统1.1 软件和硬件准备硬件:CM4(4GB DDR32GB EMMC 板载WIFI和蓝牙)CM4-to-Pi4-Adapter软件:Raspberry Pi或者 Win32DiskImagerRaspberry Pi下载链接:点击直接下载Win32DiskImager下载链接:链接&#x…

JSP 在线学习管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 在线学习管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为SQLServer2008&#x…

第09章_MySQL子查询

第09章_子查询 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了…

2023年你应该关注的JavaScript趋势

本文翻译者系360 奇舞团前端开发工程师原文标题:Top JavaScript (JS) Trends You Should Follow in 2023原文作者:yevheniia原文地址:https://www.codica.com/blog/top-javascript-trends/#top-java-script-frameworks-and-libraries-to-watc…

【python】考前复习,python基础语法知识点整理

文章目录1.常量与表达式2.变量和数据类型创建变量数据类型动态类型数据类型的转换3.注释4.字符串字符串的定义方式字符串的拼接字符串的格式化①字符串格式化的精度控制字符串的格式化②对表达式进行格式化5.从控制台输入(input)6.运算符算术运算符赋值运算符布尔类型和比较运算…

顶象APP加固的“蜜罐”技术有什么作用

目录 蜜罐有很多应用模式 蜜罐技术让App加固攻守兼备 顶象端加固的三大功能 为了捕获猎物,猎人会在设置鲜活的诱饵。被诱惑的猎物去吃诱饵时,就会坠入猎人布置好的陷阱,然后被猎人擒获,这是狩猎中常用的一种手段。在业务安全防…