浅谈JavaEE小知识点

浅谈JavaEE小知识点

  • JDK JRE JVM 区别

    Jdk 将不可用Java文件变成可用class文件,jdk是开发人员使用的,jdk还可以执行class文件,javac编译命令Java (class文件的名)执行名命令, jre将class文件放到jvm中,在jvm中运行。

  • 怎么快速除2乘2

    可以使用位移运算法,例如a<<1=a*2 a>>1=a/2,但是byte和short类型变成了int

  • 关于JVM垃圾回收机制

    虚拟机自动回收垃圾,人为不能控制回收哪处的垃圾。回收垃圾实在堆内存中发生。没有引用指向的对象会被标记为垃圾。可以使用system().gc是提醒进行垃圾回收处理。Runtime().gc也是一个意思。虚拟机自己回收还是提醒回收都会有一个Finalize()方法。

  • 什么是继承

    子类继承父类中的方法与属性,关键字是extends。子类可以比父类增加自己的属性和方法。

  • 什么是接口

    接口之中的所有方法都必须得到使用,缺一不可,接口不是一个类,不能实例化。除非是JDK1.8以后方法前加default可以加方法体,否则不能加方法体。接口可以有常量,抽象方法,默认的方法都是abstract(抽象的)。接口可以实现多继承,用implements实现接口。

  • 什么是封装

    封装就是把对象的属性和方法使用private public protected default四个关键字来修饰,尽可能的隐藏内部细节,只提供接口。

  • 抽象类和接口有什么区别与什么时候使用

    接口之中只能定义抽象方法(除了JDK8以后),public final static 修饰的常量,抽象类可以定义普通方法和抽象方法。抽象类是一个类只能被单继承,而接口可以被多实现,抽象类可以实现接口,抽象类只能继承抽象类并且是单继承,接口只能继承接口 并且可以多继承。(区别)
    他们都是被用来继承或实现的,都不能被实例化。原则上能写成接口就不要写成继承(联系)

  • 什么是多态

    1.多态是指父类引用指向子类对象,一定发生继承关系。
    2.多态指的是重载和重写,方法的重载编译时多态,重写则是运行时多态。

  • 面向对象和面向过程

    面向对象就是找对象,解决每个对象的问题,然后成功。面向过程就是单纯的解决一个又一个问题最终实现成功

  • 怎么理解super和this

    This是当前对象的引用,super是当前对象的父类进行引用。

  • 怎么理解堆内存和栈内存

    垃圾回收在堆内存中进行,栈内存中运行方法,可以反复进栈出栈,但是要注意栈溢出问题。栈是先进后出,后进先出。

  • 如何理解static 和final

    Static是静态的,属于类,存在于静态方法区,final修饰变量不可修改值,被static和final修饰的就是常量。

  • JAVA怎么实现多继承

只对此类可见,其他类都不可见;好处,隐藏你其他类知道的操作,也即封装性,但内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量

  • 什么地方用到了多态

    打印机 一个彩色 一个黑白,打印机对象两个。
    方法重载重写
  • 怎么理解内存垃圾

    没有指针指向的堆中的数据,系统自动回收。
  1. copying 把散着的存活的数据拷贝到相对连续的内存当中,先拷贝有用的后清理垃圾内存。
  2. mark-compact 标记活的—》放入连续的内存之中
  3. mark-sweeping将有用的无用的全部做标记,直接删除没用的
  • 如何理解对象引用

    实例化类时,new出一个新对象,给新对象取外号也就是赋予地址,调用此地址就是调用此对象,这就是对象引用
  • 类和对象之间的区别

    具有相同属性及相同行为的一组对象称为类。对象是类NEW出来的
  • 怎么理解高内聚低耦合这句话

块内联系,一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高
块间联系,模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息

  • 什么是匿名对象

    直接new引用 没有名字,例如new DD()=。。。。。,用完之后直接回收,匿名内部类就是一个特殊的内部类,匿名内部类只能在内部使用
  • 重载和重写

重载是编译时多态,重写是运行时多态,重写是为了继承,写在方法之中,重载的时候方法名一样,参数类型和个数不一样,重写是对父类的函数进行重新定义。

  • StringBuffer 和StringBuilder

    Builder线程不安全,但是更加高效更加实用, Builder运行速度快,多线程buffer,单线程builder
  • listiterrator 和interator区别

    Listiterrator只能用于list, Listiterrator可以用add方法,iterator不可以,listiterrator有hasprevious逆向遍历,可以定位,使用nextindex,listiterrator可以用set修改,itertor不可以修改
  • linkedlist和arraylist的优缺点

    Arraylist是满了以后自动扩容,线性顺序存储,查找快,增删慢
    Linkedlist是双链表结构,查找慢 增删快有getFirst等方法
  • 队列与栈区别

Queue队列先进先出 栈先进后出 环形结构先写的先被覆盖栈调用的是linkedlist方法

  • 队列输入aaa,bbb,ccc,ddd 输出也是aaa,bbb,ccc,ddd

    用两个栈实现先进先出的队列功能

  • collection和collections区别

    对集合对象进行基本操作的通用接口方法
    包含有各种有关集合操作的静态多态方法。包装类

  • Stringbuffer和Srting区别

    Stringbuffer不需要分配新内存用append,String需要分配新内存

  • treeset是啥

    TreeSet 是一个自然顺序的集合,继承了AbstractSet抽象类,所以它是一个set集合,可以被实例化,且具有set的属性和方法,不允许添加重复元素

  • hashset是啥

    给了一个初始常量16,还有一个加载因子0.75,然后进行扩容,扩容约二倍,存取速度快

  • 常用集合有哪些*

    Collection :集合的根接口
    List:有序可重复arraylist:查找快增删慢 linkedlist:查找慢增删快getfirst方法
    Set:无序不可重复hashset: 存取快不能保证迭代的顺序hashcode相同时发生了hash冲突使用拉链法,也是使用了右移方法因为除法效率低
    linkedhashset: 迭代的输出顺序与输入顺序一致 treeset:有自然顺序
    Map:键不重复,值可以重复hashmap:访问速度快,键只允许一个为null,值可以多个null
    linkedhashmap: 保持了插入的顺序 treemap: 默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

  • list和set

    Set内存放的元素不允许重复无顺序,List存放的元素有顺序可重复。

  • hashset如何运用hashcode和equals来区分的

    hashset先调用对象的hashcode函数来进行散列,当散列到不同位置时,则认为对象不相同且进行插入操作(不用判断equals函数);相同位置则需要使用equals判断

  • 什么是桶

    桶是key和value的包装

  • HashMap和hashtable区别

    Table=stringbuffer线程安全慢
    Hashmap允许空值 线程不安全快

  • linkedhashset和hashset区别

    Linkedhashset迭代的顺序与输入顺序一致

  • Map集合是collection框架下的吗?

    不是

  • MAP值可以重复吗

    key不会出现重复,如果重复了就会覆盖
    value可以重复

  • 如何遍历

    Iterator for foreach

  • foreach和迭代器遍历的区别

    iterator()要求容器返回一个Iterator。next()获得序列中的下一个元素。hasNext()检查序列中是否还有元素。remove()将迭代器新返回的元素删除。

  • throws和throw都是什么

    throw是语句抛出一个异常写在方法体中。throws是写在方法声明上。

  • 迭代器迭代时可以删除和增加吗list集合

    可以删除remove调用的是interator本身的方法

  • 迭代器模式

    迭代器模式:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节

  • 集合可以嵌套集合吗

    可以 因为有object

  • final可以修饰什么

    属性和方法还有类,被final修饰的类和方法无法被继承。

  • 简单说一下排序算法(查找算法)*

    二分法查找:数据需是排好序的,每次定义查询的长度都是数值的一半
    直接插入:数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换
    希尔排序:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小
    简单选择:找到关键字最小的元素,最小元素不是待排序序列的第一个元素,将其和第一个元素互换;余下的 N - 1 个元素中,找出关键字最小的元素,重复
    堆排序:构建大顶堆,根元素必须是最大值,取出根节点与序列末尾元素进行交换对交换后的n-1个序列元素进行调整,然后重复
    快速排序:选择序列当中第一个数最为基准数,序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧
    冒泡排序:双重循环,必须保证右边的数据比左边的大
    归并排序:将序列每次折半拆分,将划分后的序列段两两排序合并
    桶排序(基数排序):从个位拆,放入各自的桶中,然后在按照十位,依次进行,最后排序成功

  • 集合也有类似的工具类吗?

    数组有 arrays工具类,集合有clloections

  • 包导进去了,调用同名类时怎么办

    写路径全程,例如com.xxx.xxx

  • 工厂模式

    工厂方法模式与抽象工厂模式。或者简单工厂模式, 工厂方法模式抽象工厂模式。
    工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

  • 进程线程包含关系

    进程包含线程,最少有一个线程,每个线程都有独立运行的栈,多进程指的是系统同事运行多个任务(程序),多线程指的是多个栈同时运行

  • 如何开辟新的线程

    1 a.一个类继承thread类
    b.重写Run方法
    c.调用.start方法激活新线程 。start实现了两个方法,开辟新的栈,run入栈,然后执行
    2 a写一个类对应Runnable接口
    b 重写run方法
    c通过线程类来讲Runnable对象作为成员变量输入(相当于重写Run方法)
    d调用线程类的start的方法激活新线程

  • 节点流,处理流,缓冲流,序列化流*

输入流 输出流
字节流 字符流 字节流 字符流
节点/基本流 FileInputStream FileReader FileOutputStream FileWriter
处理/转换流 InputStreamReader FileOutputStream
缓冲流 BufferedInputStream bufferdeReader BufferedOutputStream bufferdeWriter
序列化流 ObjectInputStream ObjectOutputStream
**transient或者static修饰则不被序列化**
  • 写IO流的时候怎么保证io正常关闭

    Trycatch finally里边写.close 都会关闭

  • 线程的状态与进程的状态相同五种*

    A:(New)新建状态
    B:(Runnable)可运行状态
    C:(Running)运行状态
    D:(Block)阻塞状态
    E:(Dead)死亡状态

  • 线程的优先级

    优先级高不代表百分之百先执行,通过设置Thread.MIN_PRIORITY//1, Thread.NORM_PRIORITY//5, Thread.MAX_PRIORITY//10,

  • 线程的休眠

    Sleep()join()是先进入锁定状态然后返回就绪状态,yield变成就绪状态,wait()是永久休眠直到唤醒,唤醒使用notify/notifyall。

  • 线程并发问题是啥,咋解决

    多个线程同时访问同一资源,应该使用锁来控制线程,synchronized修饰需要修饰的方法上叫做方法锁,还可以添加同步代码块synchronized(this),this称为对象锁,锁一致时才是上锁,不一致等于没上锁。还有一种锁叫类锁,当前对象名.class就是类锁

  • 类锁与对象锁

    类锁是一种特殊的对象锁,

  • 线程池创建

    运用Excutors创建线程池,能装到池子中的,Runnable接口还有Callable接口,ExcutorServicees=Executors.newFixedThreadPOOL(2),参数的意义是能装几个线程,二者区别是Runnable实现的是RUN方法没有返回值,callable实现的是Call方法有返回值,可以自己填写在泛型之中返回。

  • 死锁的发生

    俩线程,彼此等待对方占用的锁,死锁发生的前提条件是大于一个锁,同步锁中嵌套了其他同步锁,程序出现了无限等待。

  • 定义日期格式

    Simpledateformate ,to_char,to_date,java区分大小写,oracle不区分

  • 运行时异常,检查性异常区别

    runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。checked exception。checked对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch

  • 构造器可以被重写吗,重载呢?

    能被重载,不能被重写

  • string能不能被继承

    被final修饰的类不能继承

  • 异常处理finally之中有return

    先执行finally ,在执行return

  • 单例模式

    懒汉式,饿汉式,注册式

  • char多大

    Java有固定长度16位,字符可以装入其中。Unicode2字节,如果是utf-8就是仨字节65535大小

  • 线程start和run有什么区别

    Start方法做了两件事,新开辟一块内存调用run方法,run做了一件事,只是运行。

  • jdbc连接步骤

    1.注册驱动。
    2.获取链接对象
    3.获取sql语句平台,例如preparestatement
    4.执行sql语句
    5.处理结果
    6.释放资源

  • jdbc如何对事物进行处理

    默认自动提交,可以修改setAutoCommit(false)来关闭默认提交,
    然后进行commit或者rollback操作

  • jdbc核心类和作用

    Drivermanager加载驱动核心类,获取连接对象,获取执行平台,执行sql语句,处理结果并释放资源,可以用class.Forname(驱动),也可以用drivermanager的registerDriver(new +驱动)。

  • 数据库连接池区别

    Druid,c3p0,dbcp:druid的driverClassName可以不配,如果不配根据url自动识别数据库类型,自己选择,属性名也大多不相同

拓展:

  • 虚方法

    实例方法的声明中含有virtual修饰符,则称该方法为虚方法。使用了virtual修饰符后,不允许再有static、abstract或者override修饰符。
  • 序列化

    Serializable接口,定义属性,书写tostring方法,设置serialVersionUID默认是1L,可以通过修改UID的值限制用户登录等
  • heap和stack

    Heap由程序员释放,stack由系统自动释放

猜你喜欢

转载自blog.csdn.net/ZhouhbUp/article/details/82753187
今日推荐