• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
wmqldy
博客园    首页    新随笔    联系   管理    订阅  订阅
java面试

1,Java面向对象特征:封装,继承,多态。

封装:把一组数据封装起来,不改变内部结构,增加代码维护性

继承:子类继承父类

多态:有继承,有重写,父类引用指向此类对象。

2,ArrayList与LinkedList区别

ArrayList是指

 
 
 

一个接着一个的数据排列

 

LinkedList是指用链表的方式进行数据连接。

当数据查找时使用ArrayList比较方便,当进行插入和删除数据时则进行LinkedList操作比较方便。

3,第一代线程安全集合Vector,Hashtablesh使用synchornized修饰方法,效率低下

     第二代线程非安全集合类ArrayList与LinkedList,线程不安全,但是效率比较高

     第三代线程安全集合类Java。util.concurrent.*底层大都采用Lock锁,保证安全的同时,性能也很多。

4,JDK1.8优点(1)接口默认方法(2)兼容Lambda表达式

5,Java接口和抽象类的相同与不同:(1)相同点:都不能实例化,都可以将抽象类和接口类型作为引用类型,一个类如果实现了一个接口或者抽象类的方法,都需要对其抽象方法全部实现,否则该类仍然被声明为抽象类。

                                                            (2)不同点:抽象类可以定义构造器,可以由抽象方法和具体方法,接口的成员都是public的,一个类只能进行一个抽象方法,抽象类可以有静态方法。

                                                               接口中不能定义构造器,不能有静态方法,一个类可以实现多个接口,抽象类中的成员可以是private,默认,protect,public。

                                                                                                                 描述特征用接口,描述概念用抽象。

6,关于Object o = new Object()的七个问题:

(1)请解释一下对象的创建过程?(半初始化)

(2)加问DCL要不要加volatile问题?(指令重排)

(3)对象在内存中的存储布局?(对象与数组的存储不同)

(4)对象头具体包含什么?(markword klasspointer  )synchronized锁信息

(5)对象怎么定位?(直接    间接)

(6)对象怎么分配?(栈上--线程本地--Eden--Old)

(7)Object o = new Object()在内存中占多少字节?

(8)为什么hotspot不使用C++对象来代替Java对象?

7,JVM的跨语言性(语言无关性):JVM只识别字节码,运行时不是翻译Java文件,而是翻译class文件,这一般称为字节码。

8,JVM与JDK的区别:

JRE=JVM+Java标准库,,,JDK=JRE+开发调试诊断工具

9,JVM运行时数据区有哪些?               线程共享区:堆内存,方法区,运行时常量池

                                                                 线程虚拟区:程序计数器,本地方法栈,,Java虚拟机栈

10,什么是堆内存?堆内存包含哪些部分?

堆是JVM最大的内存区域,申请的所有对象都是在这里储存的。以Hostpot为例,堆空间为了方便GC模块进行对象分配和回收,可以把堆空间划分为新生代和老生代。

11,什么是内存溢出?

内存溢出是指JVM可用内存不足,JVM运行需要使用的内存超出最大可用值,会导致JVM出现异常。常见OOM有:栈溢出,堆溢出,方法区溢出,本机直接内存溢出

12,什么是内存泄漏?与内存溢出有什么关系?

是指本来无用的对象继续占用内存,没有恰当的时机释放占用的内存,如果存在严重的内存泄漏问题,随着时间的推迟,则必然会引起内存溢出。

内存泄漏一般是资源管理问题和程序BUG,内存溢出则是内存空间不足和内存泄漏的最终结果。

13,对象头包含哪些部分?1,存储对象自身的运行时数据,如哈希码。2,类型指针,虚拟机通过这个指针来确定这个对象是哪个类的实例

14,常用的JVM启动参数有哪些?设置堆内存,指定GC算法,打印GC日志,指定GC并行线程。

15,设置堆空间的最大值?70%~80%

16,JVM默认使用的垃圾收集器是什么?并行垃圾收集器

17,什么是并行垃圾收集器?多线程并行执行垃圾收集,提高垃圾收集效率,缩短时间,增加CPU的使用率

18,事务并发引发的后果?1,脏读:一个事务读取另一个事务未提交的数据的现象。2,不可重复读:在同一种事件中,前后两次读取的数据不一致。3,幻读强调的是集合的增减

19,什么是三星索引?1,一个查询相关的索引行是相邻的或者至少相距足够靠近的则获得一星。2,如果索引中的数据顺序和查找中的排列顺序一致,则获得二星。3,如果索引中包含了查询中所需要的全部列则获得三星

20,如何提高insert的性能?合并多条insert为一条,

21,面向对象是具体的方法,优点:低耦合,易复用,易维护,有继承,封装,多态的特性。                             缺点:性能比面向过程低

面向过程针对的是人,优点:不需要实例化对象,性能比面向对象高。                                                                 缺点:可维护性差。

22,如何降低耦合?1,少使用类的继承,多用接口隐藏实现的细节。2,遵循一个定义只在一个地方出现。  3,少使用全局变量。 4,类属性和方法的声明少用public,多用private关键字

        5,遵循一个定义只在一个地方出现。 

23,如何降低耦合性?把模块的通信信息放在缓冲区中。

24,HashMap底层为数组和链表,当链表的长度大于8,数组长度必须是64,HashMap可以转换为红黑树。

25,HashMap数组的默认大小是16,如果不断插入元素,那么冲突就会很频繁,当插入数据的元素量超过loadFactor函数数组的比例之后(默认值0.75)就需要进行扩容。

26,sleep是线程中的方法,wait是Object中的方法,sleep方法不会释放锁,而wait方法会释放锁,sleep不需要被唤醒,而wait需要被唤醒。

27,JDK1.7及以前HashMap底层结构是数组加链表,1.8之后加上了红黑树

28,sql增删改查语句:

增加: (insert)              1,插入单行                                                                                                      insert 【into】<表名>(列名)values  (列值)

                                          2,将现有表数据添加到一个已有表                                                                  insert 【into】<已有的新表>(列名)select  <原表列名>   from   <原表名>   

删除:(delete)           1,删除满足条件的行                                                                                           delete from <表名>  【where   <删除条件>】

                                         2,删除整个表                                                                                                  truncate  table   <表名>

                注意:删除表的所有行,但表的结构,列,约束,索引等不会被删除;不能用语有外建约束引用的表

改    :(update)                                                         UPDATE      [表名]    SET       [修改内容如name= 'Mary' 列名='新的值,非数字加单引号']           WHERE           [条件如:id=3];

查    :(select或show)                                                                                                                         查询全部数据                     select * from <表名>
                                                                                                                                                                查询某一个列的数据:          select <列名> from <表名>
                                                                                                                                                                查询多个列名的数据:          select <列名1>,<列名2>… from <表名>

posted on 2022-06-13 18:05  wmqldy  阅读(32)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3