垃圾回收算法

引用计数法,标记清除法,标记压缩清除法(Java中老年代采用),复制算法(Java中新生代采用),分代法(Java堆采用),分区算法。

重要的三句话:

垃圾回收器只知道释放那些经由new分配的内存。

1.对象可能不被垃圾回收;

2.垃圾回收并不等于”析构”;

3.垃圾回收只能与内存有关。其他补充

栈:后进先出

队列:先进先出

前:中左右        中:左中右      后:左右中

创建执行线程的方式:

1.继承Thread类

2.实现Runnable接口

3.实现Callable接口

4.线程池

2/3的区别:想较于实现Runnable接口的方式,Callable带泛型,这个方法可以有返回值(返回值类型就是泛型指定的),并且可以抛出异常。

执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果,FutureTask是Future接口的实现类

类和对象:

类是对象具有共同特征和行为的对象的抽象1、String和StringBuffer的区别?

简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。

StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。

StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。

StringBuffer类中的方法要偏重于对字符串的变化例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。2、HashMap和Hashtable的区别?

HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:

补充:HashMap是线程不安全的,Hashtable是线程安全的;Hashtable效率低,因为——Hashtable和HashMap底层都是Hash表,Hashtable有锁,并且他的锁是锁整个表,(并行转换成了串行);当多个线程并发去访问这个Hashtable时,一次只有一个进入。当一个结束了才开启下一个。效率低。

①、HashMap允许键和值是null,而Hashtable不允许键或者值是null。

②、Hashtable是同步(synchronization)的,而HashMap不是(这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的;Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。)。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。

③、另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。

HashMap可以通过下面的语句进行同步:Map m = Collections.synchronizeMap(hashMap);3、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

Java中交互方式分为同步和异步两种:

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。

区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

哪些情况建议使用同步交互呢?比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。

(如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。)4、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?

接口可以继承接口。

抽象类可以实现(implements)接口。

抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。5、abstract class(抽象类)和interface(接口)有什么区别?详细

1.相同点

A. 两者都是抽象类,都不能实例化。

B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点

A. interface需要实现,要用implements,而abstract class需要继承,要用extends。

B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。

C. interface强调特定功能的实现,而abstract class强调所属关系。

D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。6、构造器Constructor是否可被override?

java 重写/覆盖(Override)与重载(Overload)

构造器不是方法,那么用来修饰方法特性的所有修饰符都不能用来修饰构造器(并不等于构造器不具备这些特性,虽然不能用static修饰构造器,但它却有静态特性)构造器只能用public private protected这三个权限修饰符,且不能有返回语句。7、编程题: 写一个Singleton出来。

单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

饿汉式/懒汉式

上面第二种写法存在的线程安全问题的解决方法8、数组有没有length()这个方法? String有没有length()这个方法?

1、数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有有length()这个方法。

2、是否可以继承String类?

String类是final类故不可以继承。

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。10、java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

throws是获取异常(用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。)

throw是抛出异常(用于手动地抛出异常对象。throw后面需要一个异常对象。)

try是将会发生异常的语句括起来,从而进行异常的处理,

catch是如果有异常就会执行他里面的语句,(catch块表示一个异常捕获块。当程序执行try块引发异常时,这个异常对象将会被后面相应的catch块捕获。)

而finally不论是否有异常都会进行执行的语句。

对于一个完整的异常处理流程而言,try块是必须的,try块后可以紧跟一个或多个catch块,最后还可以带一个finally块。

try块中可以抛出异常。11、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

一、多线程实现方法有两种 :

①种是实现Runnable 接口  ②种是继承Thread类。

二、实现同步也有两种 :

①种是用同步方法,②种是用同步块。

同步方法就是在方法返回类型后面加上synchronized, 比如:

public void * synchronized add(){...}。

同步块就是直接写:synchronized (这里写需要同步的对象){...}

三、

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法, * 调用此方法要捕捉InterruptedException异常 * 。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程 ,而是由JVM确定唤醒哪个线程,而且不是按优先级  。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。12、构造一个链表类,用堆栈类实现

13、final,finally,finalize的差别

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。14、Java异常处理机制

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。15、给定一个序列,取出其中第二大的数,要求不对整个序列排序

16、字符串压缩

java 同步块 抛出异常_java问题合集(一)相关推荐

  1. java 同步块关键字_Java同步关键字,同步方法和块

    java 同步块关键字 Java synchronized keyword is used in multithreading to create a code block that can be e ...

  2. java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...

    这是一个来自 Java 编程思想的例子,它只是想表达 sleep 的线程可中断,但同步 IO 等待资源,或同步获得锁失败的线程,是不可同步的. //: concurrency/Interrupting ...

  3. java 同步块原理_Java同步代码块和同步方法原理与应用案例详解

    Java同步代码块和同步方法原理与应用案例详解 发布于 2020-8-7| 复制链接 摘记: 本文实例讲述了Java同步代码块和同步方法.分享给大家供大家参考,具体如下:一 点睛所谓原子性:一段代码要 ...

  4. java 同步块_java 同步块(Java Synchronized Blocks)

    java 同步块(Java Synchronized Blocks) Java 同步块包括方法同步和代码块同步.java 同步可以避免资源竞争,避免死锁. 主题包括的主要内容: The Java sy ...

  5. java 同步块(Java Synchronized Blocks)

    java 同步块(Java Synchronized Blocks) Java 同步块包括方法同步和代码块同步.java 同步可以避免资源竞争,避免死锁. 主题包括的主要内容: synchronize ...

  6. 【线程同步】 Java 同步块(synchronized)详细说明

    我们在java开发中常常用synchronized( 互斥锁)来进行同步,但是对于 synchronized关键字有那些用法,会产生什么样的效果却不一定清楚,下面将详细介绍synchronized在程 ...

  7. java捕获异常和抛出异常_Java捕获多个异常,重新抛出异常

    java捕获异常和抛出异常 In Java 7, catch block has been improved to handle multiple exceptions in a single cat ...

  8. java 同步块的锁是什么,java – 同步块 – 锁定多个对象

    我添加了另一个答案,因为我还没有添加评论给其他人的帖子. >事实上,同步是用于代码,而不是对象或数据.在同步块中用作参数的对象引用表示锁定. 所以如果你有如下代码: class Player { ...

  9. Java初级开发工程师面试题合集

    一.多线程 什么是多线程? ​ 多线程是指程序中包含多个流,即在一个程序中可以同时进行多个不同的线程来执行不同的任务 多线程的优劣? ​ 优点:可以提高CPU利用率, 提高了程序的效率, 单个程序可以 ...

最新文章

  1. 如何判断CPU、内存、磁盘的性能瓶颈?
  2. “轻雀会议”跨越社交的“云沟通”
  3. 在/sys目录下建立一个文件,并且实现信息的读取和存储
  4. 结合awk列举大于指定容量大小所有文件目录
  5. 【大会】编码、画质评价与网络协议的未来
  6. 验证DetailsView插入数据不为空
  7. SSD300网络结构(pytorch)+多尺度训练与测试
  8. 为WebBrowser的WEB页的Document注册事件的问题
  9. java之设计模式工厂三兄弟之简单工厂模式
  10. es6 modules 和commonjs
  11. Data Services Designer将数据从sql server抽取到hana
  12. linux系统常见的压缩命令,Linux 系统常见的压缩指令
  13. C# 获取当前程序集版本号,获取当前编译时间
  14. USB Repair(usb设备修复工具)官方正式版V8.0.3.1069 | u盘修复软件下载 | u盘修复软件哪个最好?
  15. 百度网盘青春版未推出前,使用这个网盘高速下载工具
  16. python调用java之jpype参数类型转换
  17. C语言实现图的关键路径算法
  18. STM32下移植UCOSIII
  19. python数组增加维度_python – 为xarray DataArray添加维度
  20. 微信小程序 wx.getUserProfile返回的iv、encryptedData 解密获取不到openId的问题解决方案 openId无返回

热门文章

  1. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一)
  2. TortoiseSVN 菜单详解
  3. SQLServer镜像状态异常排查
  4. 车联网行业No.1元征科技的云端架构实现
  5. 阿里云主机安装Memcached扩展优化WordPress
  6. C语言实现简单线程池(转-Newerth)
  7. mnesia数据库学习笔记四
  8. Visual Studio 2008 每日提示(三十一)
  9. 什么是java双亲委派机制
  10. k8s ConfigMap使用示例:以volume或变量形式挂载到pod中