首页 > 编程语言 > 详细

Java基础知识(面试问题2)

时间:2019-06-28 15:31:40      阅读:153      评论:0      收藏:0      [点我收藏+]

一、Java基础

什么是字符串常量池?

Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池;

String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引号(”“)创建字串对象。

技术分享图片如果池中没有字符串字面量“Cat”,那么首先在池中创建,然后在堆空间中创建,因此将创建总共2个字符串对象。

之所以有字符串常量池,是因为String在Java中是不可变(immutable)的,它是String interning概念的实现。字符串常量池也是亨元模式(Flyweight)的实例。

字符串常量池有助于为Java运行时节省大量空间,虽然创建字符串时需要更多的时间。

当我们使用双引号创建一个字符串时,首先在字符串常量池中查找是否有相同值的字符串,如果发现则返回其引用,否则它会在池中创建一个新的字符串,然后返回新字符串的引用。

如果使用new运算符创建字符串,则会强制String类在堆空间中创建一个新的String对象。我们可以使用intern()方法将其放入字符串常量池或从字符串常量池中查找具有相同的值字符串对象并返回其引用

 

String为什么是不可变的?

技术分享图片

value,offset和count这三个变量都是private的,并且没有提供setValue, setOffset和setCount等公共方法来修改这些值,所以在String类的外部无法修改String。也就是说一旦初始化就不能修改, 并且在String类的外部不能访问这三个成员。此外,value,offset和count这三个变量都是final的, 也就是说在String类内部,一旦这三个值初始化了, 也不能被改变。所以可以认为String对象是不可变的了。 
那么在String中,明明存在一些方法,调用他们可以得到改变后的值。这些方法包括substring, replace, replaceAll, toLowerCase等。例如如下代码:

String a = "ABCabc";
System.out.println("a = " + a);
a = a.replace(‘A‘, ‘a‘);
System.out.println("a = " + a);

那么a的值看似改变了,其实也是同样的误区。再次说明, a只是一个引用, 不是真正的字符串对象,在调用a.replace(‘A‘, ‘a‘)时, 方法内部创建了一个新的String对象,并把这个心的

对象重新赋给了引用a。String中replace方法的源码可以说明问题
技术分享图片

 

String s = new String("xyz");究竟产生了几个对象,从JVM角度谈谈?

答:一个或者两个;

声明:s不是对象,不是对象,不是对象,s是指针引用

判断  :

if("xyz"在常量池中存在){

          只会在堆中创建一个new String("xyz") ;一个对象

} else {

            会现在常量池中创建一个“xyz”,然后在堆中创建一个new String("xyz");两个对象

}

 

 

String拼接字符串效率低,你知道原因吗?

你真的了解String的常见API吗?

Java中的subString()真的会引起内存泄露么?

浅析Java中的final关键字?

浅析Java中的static关键字?

你对Java中的volatile关键字了解多少?

i++是线程安全的吗?如何解决线程安全性?

从字节码角度深度解析 i++ 和 ++i 线程安全性原理?

请谈谈什么是CAS?

从源码角度看看ArrayList的实现原理?

手写LinkedList的实现,彻底搞清楚什么是链表?

Java中方法参数的传递规则?

Java中throw和throws的区别是什么?

重载和重写的区别?

手写ArrayList的实现,在笔试中如何过关斩将?

finally语句块你踩过哪些坑?

为什么重写equals方法需同时重写hashCode方法?

equals() 与 == 的区别?

StringBuffer和StringBuilder的区别,从源码角度分析?

你知道HashMap的数据结构吗?

为何HashMap的数组长度一定是2的次幂?

HashMap何时扩容以及它的扩容机制?

HashMap的key一般用字符串,能用其他对象吗?

HashMap的key和value都能为null么?如果key能为null,那么它是怎么样查找值的?

HashMap是线程安全的吗?如何实现线程安全?

从源码角度分析HashSet实现原理?

HashTable与HashMap的实现原理有什么不同?

String方法intern() 你真的会用吗?

什么是自动拆装箱?

String.valueOf和Integer.toString的区别?

二、Java多线程

线程的生命周期包括哪几个阶段?

多线程有几种实现方式?

请谈谈什么是进程,什么是线程?

启动线程是用start()方法还是run()方法?

说说线程安全问题,什么实现线程安全,如何实现线程安全?

sychronized和Lock的区别?

sleep()和wait()的区别?

深入分析ThreadLocal的实现原理?

你看过AbstractQueuedSynchronizer源码阅读吗,请说说实现原理?

谈谈对synchronized的偏向锁、轻量级锁、重量级锁的理解?

通过三种方式实现生产者消费者模式?

JVM层面分析sychronized如何保证线程安全的?

JDK层面分析sychronized如何保证线程安全的?

如何写一个线程安全的单例?

通过AQS实现一个自定义的Lock?

ThreadLocal什么时候会出现OOM的情况?为什么?

为什么wait, notify 和 notifyAll这些方法不在thread类里面?

你真的理解CountDownLatch与CyclicBarrier使用场景吗?

出现死锁,如何排查定位问题?

notify和notifyAll的区别?

线程池启动线程submit和execute有什么不同?

SimpleDateFormat是线程安全的吗?如何解决?

请谈谈ConcurrentHashmap底层实现原理?

使用synchronized修饰静态方法和非静态方法有什么区别?

当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其方法?

线程池的原理,为什么要创建线程池?创建线程池的方式?

创建线程池有哪几个核心参数? 如何合理配置线程池的大小?

synchronized修饰的静态方法和非静态方法有什么区别?

三、Java Web

什么是Servlet,Servlet生命周期方法?

什么Session和Cookie,它们之间有什么联系?

JSP的八个隐含对象有哪些?

JSP的四个域对象的作用范围?

Post和Get请求的区别?

转发和重定向有什么区别?

JSP自定义标签,如何实现循环打印功能?

Http1.0和Http1.1的区别是什么?

拦截器与过滤器的区别?

四、JVM面试题

JVM内存区域如何划分?

JVM堆中对象是如何创建的?

JVM对象的结构?

JVM垃圾回收-如何判断对象是否是垃圾对象?

JVM垃圾回收算法有哪些?

JVM垃圾收集器有哪些?

JVM内存是如何分配的?

从一道面试题分析类的加载过程?

JVM双亲委派机制?

JVM可以作为GC Root的对象有哪些?

请写出几段可以导致内存溢出、内存泄漏、栈溢出的代码?

哪些情况会导致Full GC?

频繁GC问题或内存溢出问题,如何定位?

五、SQL性能优化

数据库三范式是什么?

数据库的事务、ACID及隔离级别?

不考虑事务的隔离性,容易产生哪三种情况?

数据库连接池原理?

什么是B-Tree?

什么是B+Tree?

MySQL数据库索引结构?

什么是索引?什么条件适合建立索引?什么条件不适合建立索引?

索引失效的原因有哪些?如何优化避免索引失效?

MySQL如何启动慢查询日志?

MySQL如何使用show Profile进行SQL分析?

一条执行慢的SQL如何进行优化,如何通过Explain+SQL分析性能?

什么是行锁、表锁、读锁、写锁,说说它们各自的特性?

什么情况下行锁变表锁?

什么情况下会出现间隙锁?

谈谈你对MySQL的in和exists用法的理解?

MySQL的数据库引擎有哪些,如何确定在项目中要是用的存储引擎?

count(*)、count(列名)和count(1)的区别?

union和union all的区别?

六、Spring框架

Spring的IOC和AOP机制?

Spring中Autowired和Resource关键字的区别?

依赖注入的方式有几种,各是什么?

Spring容器对Bean组件是如何管理的?

Spring容器如何创建?

Spring事务分类?

Spring事务的传播特性?

Spring事务的隔离级别?

Spring的通知类型有哪些?

七、SpringMVC框架

SpringMVC完整工作流程,熟读源码流程?

SpringMVC如何处理JSON数据?

SpringMVC拦截器原理,如何自定义拦截器?

SpringMVC如何将请求映射定位到方法上面?结合源码阐述?

SpringMVC常见注解有哪些?

SpringMVC容器和Spring容器的区别?

SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?

八、MyBatis框架

MyBatis中#和$的区别?

MyBatis一级缓存原理以及失效情况?

MyBatis二级缓存的使用?

MyBatis拦截器原理?

看过MyBatis源码吗,请说说它的工作流程?

九、Java高级部分

Dubbo负载均衡策略?

Dubbo中Zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?

Dubbo完整的一次调用链路介绍?

请说说SpringBoot自动装配原理?

有用过SpringCloud吗,请说说SpringCloud和Dubbo有什么不一样?

什么是WebService,如何基于WebService开发接口?

谈谈项目中分布式事务应用场景?

使用Redis如何实现分布式锁?

请谈谈单点登录原理?

Tomcat如何优化?

后台系统怎么防止请求重复提交?

Linux常见命令有哪些?

请说说什么是Maven的依赖、继承以及聚合?

Git暂存区和工作区的区别?

Git如何创建、回退以及撤销版本?

常见的设计模式有哪些?

 

Java基础知识(面试问题2)

原文:https://www.cnblogs.com/h-c-g/p/11102803.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!