Java 核心概念

  • equals 与 hashCode 的异同点在哪里?Java 的集合中又是如何使用它们的。

  • Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法比较的的是值,但object类中很明显是对两个对象的地址值进行的比较(即比较引用是否相同).Java采用了哈希表的原理。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。    Java对于eqauls方法和hashCode方法联系

    1、如果两个对象相同,那么它们的hashCode值一定要相同;

    2、如果两个对象的hashCode相同,它们并不一定相同上面说的对象相同指的是用eqauls方法比较。

  • 描述下 Java 中集合(Collections),接口(Interfaces),实现(Implementations)的概念。LinkedList 与 ArrayList 的区别是什么?

  • 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
     2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
     3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
  • 基础类型(Primitives)与封装类型(Wrappers)的区别在哪里?

  • final 与 static 关键字可以用于哪里?它们的作用是什么?

  • final类不能被继承,没有子类,final类中的方法默认是final的。
            final方法不能被子类的方法覆盖,但可以被继承。
            final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
            final不能用于修饰构造方法。
  • static变量\静态方法\static代码块
  • 阐述下 Java 中的访问描述符(Access Modifiers)。

  • 描述下 String,StringBuilder 以及 StringBuffer 区别。

  • String:不可变的对象,对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收。
    StringBuffer 字符串变量(线程安全),适用于多线程程序中,保证同步性。
    StringBuilder 字符串变量(非线程安全),适用于单线程程序中,不保证同步性
  • 接口(Interface)与抽象类(Abstract Class)的区别在哪里。

  •  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
      2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
      3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。 
      4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
      5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 
      7.接口中的方法默认都是 public,abstract类型的。

     

  • 覆盖(Overriding)与重载(OverLoading)的区别在哪里。

  • Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。
    
    方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
  • 异常分为哪几种类型?以及所谓的handle or declare原则应该如何理解?

  • 非运行是异常和运行时异常
  • 简述垃圾回收器的工作原理。

    1. GC的工作原理: 引用计数,标记复制"引用计数"是一种简单但速度很慢的垃圾回收技术.所有对象都有一个引用计数器,当有引用连接时计数器加1,当引用离开作用域时或者被置于NULL时,计数器-1,垃圾回收器会在所有包含对象引用的列表上进行遍历,当发现某个对象的引用计数为0时,就释放占用的空间."标记复制"的运行机制,垃圾回收器遍历包含所有引用的列表,当发现存活的对象引用时做上标记,这样当遍历完所有对象引用并做上标记的时候,执行垃圾回收,将没有标记的对象堆空间释放.

    2. 垃圾回收机制的优点:Java的垃圾回收机制使得java程序员不用担心内存空间的分配,减少了内存溢出.但同时也牺牲了一定的性能.

  • 你是如何处理内存泄露或者栈溢出问题的?

  • 内存溢出,一般是指堆栈溢出,通常有以下可能及解决方法: 1、程序本身有bug。这种情况,通常出在程序的调试阶段和beta测试版中。换正式版一般可以解决。 2、系统太新,程序太老。比如xp时代的程序在win10下运行,就经常会出现这种情况。
  • 内存泄露通常都是指针没有删除造成的。
    可以通过调试看看问题出在哪里,也可以使用vc内存泄露检测工具检测下。
  • 如何构建不可变的类结构?关键点在哪里?

  • 什么是 JIT 编译?

  • Java 8 / Java 7 为我们提供了什么新功能?即将到来的 Java 9 又带来了怎样的新功能?

    • 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
      1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
      2 Redis支持数据的备份,即master-slave模式的数据备份。
      3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

java核心问题总结的更多相关文章

  1. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  2. Java核心:类加载和JVM内存的分配

    类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(J ...

  3. 深入Java核心 Java内存分配原理精讲

    深入Java核心 Java内存分配原理精讲 栈.堆.常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,详细讲解Java内存分配方面的知识. Java内存分 ...

  4. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  5. Java核心知识点学习----使用Condition控制线程通信

    一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...

  6. Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  7. Java核心_内省

    Java核心_内省 查看java的api,发现有一个包java.bean咦,这个包是干什么的呢,原来,它是用来操作JavaBean对象的! 一.内省操作①JavaBean:一种特殊的Java类无参构造 ...

  8. Java核心 --- 枚举

    Java核心 --- 枚举 枚举把显示的变量与逻辑的数字绑定在一起在编译的时候,就会发现数据不合法也起到了使程序更加易读,规范代码的作用 一.用普通类的方式实现枚举 新建一个终态类Season,把构造 ...

  9. Java核心 --- 注解

    Java核心——注解 注解是jdk5以后的新特性,Spring和Hibernate等框架提供了注解的配置方式使用, 本文参考了浪曦风中叶的注解讲解,主要讲解jdk内置注解的用法,注解的声明和定义,以及 ...

  10. Java核心编程快速学习

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

随机推荐

  1. django中操作cookie与session

    cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...

  2. DataBase(28)

    1.数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完 ...

  3. nodejs核心技术

    一.知识结构: http模块:配置简单 的web服务,npm/cnpm工具 express框架:express中间件进行服务配置:路由:请求处理: DB服务:学习使用mysql关系型数据库: web接 ...

  4. ASP.NET Core Web API 索引 (更新Redis in .NET Core)

    https://www.cnblogs.com/cgzl/p/9178672.html

  5. [转载]C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编

    原文出处:https://www.cnblogs.com/wuhuisheng/archive/2011/03/23/1992652.html 验证电话号码的主要代码如下: public bool I ...

  6. shell IFS

    在bash中IFS是内部的域分隔符,manual中对其的叙述如下:IFS The Internal Field Separator that is used for word splitting af ...

  7. java内存泄漏与内存溢出

    https://www.cnblogs.com/panxuejun/p/5883044.html 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out o ...

  8. spring中的springSecurity安全框架的环境搭建

    首先在web.xml文件中配置监听器和过滤器 <!--监听器 加载安全框架的核心配置文件到spring容器中--> <context-param> <param-name ...

  9. composer 报错:Failed to decode response: zlib_decode(): data error 解决办法

    执行命令 composer require particle/validator 报错 Failed to decode response: zlib_decode(): data error 网上推 ...

  10. Redis Desktop Manager连接Redis

    1.注释redis.conf文件中的:bind 127.0.0.1修改为自己的IP 2.ifconfig查看自己的虚拟机ip 3.拿到IP后,返回Windows,开启cmd,通过telnet命令,测试 ...