1.JAVA中的单例模式

单例设计模式所解决的问题就是:保证类的对象在内存中唯一。

单例模式分为:懒汉式单例、饿汉式单例、登记式单例三种。

1)饿汉式单例类.在类初始化时,已经自行实例化

2)懒汉式单例类.在第一次调用的时候实例化

3)登记式单例.类似Spring里面的方法,将类名注册,下次从里面直接获取。

单例模式的特点:

  1)单例类只能有一个实例。
  2)单例类必须自己创建自己的唯一实例。
  3)单例类必须给所有其他对象提供这一实例。

2.内存溢出和内存泄露

可以去看这批博客介绍:https://www.cnblogs.com/rgever/p/8899758.html

1)内存溢出(Out Of Memory---OOM):系统已经不能再分配出你所需要的空间,比如你需要100M的空间,系统只剩90M了,这就叫内存溢出

2)内存泄漏:  (Memory Leak)----》强引用所指向的对象不会被回收,可能导致内存泄漏,虚拟机宁愿抛出OOM也不会去回收他指向的对象,

意思就是你用资源的时候为他开辟了一段空间,当你用完时忘记释放资源了,这时内存还被占用着,一次没关系,但是内存泄漏次数多了就会导致内存溢出

3.java的反射机制

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

4.spring的动态原理

5.spring中的beanfactory和applicationcontext的区别

作用:

1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。
2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:

a. 国际化支持
b. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
c. 事件传递:通过实现ApplicationContextAware接口
3. 常用的获取ApplicationContext的方法:
FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件
WebApplicationContextUtils:从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现

区别:

<1>如果使用ApplicationContext,如果配置的bean是singleton,那么不管你有没有或想不想用它,它都会被实例化。好处是可以预先加载,坏处是浪费内存。
<2>BeanFactory,当使用BeanFactory实例化对象时,配置的bean不会马上被实例化,而是等到你使用该bean的时候(getBean)才会被实例化。好处是节约内存,坏处是速度比较慢。多用于移动设备的开发。
<3>没有特殊要求的情况下,应该使用ApplicationContext完成。因为BeanFactory能完成的事情,ApplicationContext都能完成,并且提供了更多接近现在开发的功能。

当我们使用ApplicationContext去获取bean的时候,在加载XXX.xml的时候,会创建所有的配置bean。

6.final、finally、finalize区别

7.synchronized和lock的区别

1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;

2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;

3)Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;

4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。

5)Lock可以提高多个线程进行读操作的效率。

  在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。

8.hashset、hashmap、hashtable的区别

hashmap和hashtable的区别:

1).两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全
Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合(Collections.synchronizedMap()实现原理是Collections定义了一个SynchronizedMap的内部类,这个类实现了Map接口,在调用方法时使用synchronized来保证线程同步,当然了实际上操作的还是我们传入的HashMap实例,简单的说就是Collections.synchronizedMap()方法帮我们在操作HashMap时自动添加了synchronized来实现线程同步,类似的其它Collections.synchronizedXX方法也是类似原理)

2).HashMap可以使用null作为key,而Hashtable则不允许null作为key
虽说HashMap支持null值作为key,不过建议还是尽量避免这样使用,因为一旦不小心使用了,若因此引发一些问题,排查起来很是费事
HashMap以null作为key时,总是存储在table数组的第一个节点上

3)HashMap是对Map接口的实现,HashTable实现了Map接口和Dictionary抽象类

4)HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75
HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是容量翻倍+1即:capacity*2+1

5).两者计算hash的方法不同
Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模

HashMap计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取摸

6)HashMap和Hashtable的底层实现都是数组+链表结构实现

hashset和hashmap、hasptable的区别:

除开HashMap和Hashtable外,还有一个hash集合HashSet,有所区别的是HashSet不是key value结构,仅仅是存储不重复的元素,相当于简化版的HashMap,只是包含HashMap中的key而已

通过查看源码也证实了这一点,HashSet内部就是使用HashMap实现,只不过HashSet里面的HashMap所有的value都是同一个Object而已,因此HashSet也是非线程安全的,至于HashSet和Hashtable的区别,HashSet就是个简化的HashMap的。

9.hashmap基本原理

10.怎么让hashmap线程安全

11.泛型,泛型好处?这带来了很多好处

12.创建线程两种方式的区别

13.静态代码块执行几次,为什么

在类加载的init阶段,类的类构造器中会收集所有的static块和字段并执行,static块只执行一次,由JVM保证其只执行一次。

代码执行顺序:

1)父类静态块

2)自身静态块

3)父类块

4)父类构造器

5)自身块

6)自身构造器

14.sleep()和wait()的区别

1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);

2、sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;

3、sleep()是线程线程类(Thread)的方法,调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;wait()是Object的方法,调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,不再次获得对象锁才会进入运行状态;

转载于:https://www.cnblogs.com/Dovegege/p/10472738.html

java基础相关知识相关推荐

  1. Java基础语法知识你真的都会吗?

    第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...

  2. 主板是计算机所有部分连接的基础,计算机基础相关知识答案.doc

    计算机基础相关知识答案 计算机基础相关知识 一.填空题: 1.计算机的硬件主要由(控制器).(运算器).(存储器).(输入输出设备)以及电源等硬件组成. 2.计算机硬件系统可以分为两大部分,即(主机 ...

  3. 主板是计算机所有部分连接的基础,计算机基础相关知识答案

    计算机基础相关知识答案 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机基础相关知识1. 计算机的硬件主要由(控制器).(运算器) ...

  4. 运用JAVA基础阶段知识,模拟双色球机选抽奖过程

    运用JAVA基础阶段知识,模拟双色球机选抽奖过程 在控制台输入抽奖次数,进行双色球抽奖,并统计中奖结果 //双色球(机选) //红球33个选6个,蓝球16个选1个 //中奖号码设定为1,2,3,4,5 ...

  5. Java基础相关6(IO)

    java基础相关6 File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 访问其表示的文件或目录的属性信息,例如:名字,大 ...

  6. Java多线程相关知识【17】--设计模式--上下文模式(Context)

    文章目录 Java多线程相关知识[17]--设计模式--上下文模式(Context) 1. 问题的引入 2. 解决方法 1. 解决理论 2. 实操代码 上下文数据保存 上文 下文 调度者 测试上下文 ...

  7. Java七十四: Java基础/核心知识总结 — — “Java千字文”

    Java基础/核心知识总结 - - "Java千字文" Java基础/核心知识笔记终于完结,从Java语言诞生到jdk8新特性,共计74篇博文,43幅自制插图,35张表格,7万6千 ...

  8. 课外知识计算机方面,单元一 计算机基础相关知识.pptx

    单元一 计算机基础相关知识.pptx 单元一 计算机基础知识电子课件计算机的发展历程计算机的特点及分类计算机的应用计算机系统的组成计算机中的信息表示计算机多媒体技术计算机信息安全计算机硬件设备知识要点 ...

  9. 清华学长免费分享Java基础核心知识大总结(1)

    自学Java,如果觉得看<Java编程思想>或者<Core Java>等之类的"圣经"觉得内容太多,一下子吃不透的话,不妨看看这本<Java基础核心总 ...

最新文章

  1. css3的3d起步——分享
  2. Ubuntu解决gedit warning问题的方法
  3. 科普|不同协议下远程服务器文件上传_下载优劣对比
  4. [Bzoj4196] [NOI2015] 软件包管理器 [树链剖分,线段树]
  5. jedis使用 api_通过Jedis API使用排序集
  6. mkenvimage
  7. 投资一个五星级酒店需要多钱?多长时间能回本?
  8. C#调用C++编写的COM DLL
  9. 分享刚学会的安装手机浏览器的实用插件tampermonkey方法
  10. geek软件是干什么的_geektool--一款很geek的工具
  11. java链接Kepserver报错误码[0x8001FFFF]
  12. 计算机中¥符号按哪个键,电脑键盘符号快捷键大全 电脑键盘上每个键的作用?...
  13. 深入浅出java web_深入浅出javaWeb实战第1讲Web的概念及其演变(上)
  14. 计算机简史:你想不通去脉 是因为你不了解来龙
  15. 实习生也容易上手的ui框架
  16. SQL入门-连结(JOIN)
  17. 使用GPG验证文件签名
  18. 程序员最该买的十本书
  19. CentOS7中启动Chrome报错ERROR:zygote_host_impl_linux.cc
  20. linux 微秒级定时,Linux下的微秒级定时器: usleep, nanosleep, select, pselect

热门文章

  1. Java二进制位运算、移位运算、、
  2. PHP中ini_set和ini_get函数用法简介
  3. iptables实现路由转发
  4. CCS5.5里DSP工程建及Simulator模式配置
  5. vivado----fpga硬件调试 (四)----mark_debug
  6. 数字信号处理中卷积的图形化动态解释
  7. linux新增ssh端口80,Linux(CentOS 7) 新增或修改 SSH默认端口
  8. chocolatey的使用
  9. 不在pytorch中的损失的函数
  10. WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(下)