Java底层基础题(一)

一、Java底层基础题

1、SpringMVC的原理以及返回数据如何渲染到jsp/html上?

答:Spring MVC的核心就是 DispatcherServlet , 一个请求经过 DispatcherServlet ,转发给HandlerMapping ,然后经反射,对应 Controller及其里面方法的@RequestMapping地址,最后经ModelAndView和ViewResoler返回给对应视图  。  具体可参考:Spring MVC的工作原理

/ 把商品数据放在模型中

// modelAndView.addObject("item", item);

// 设置逻辑视图

// modelAndView.setViewName("itemEdit");

 

2、一个类对象属性发生改变时,如何让调用者知道?

答:Java event时间监听  ,即在set方法改变属性时,触发 ,这种模式也可以理解为观察者模式,具体查看:观察者模式简单案例和说明

 

3、重写equals为何要重写hashCode?

答:判断两个对象是否相等,比较的就是其hashCode, 如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。  hashcode不一样,就无法认定两个对象相等了

 

4、谈谈你对JVM的理解?

答: Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。Java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。

JVM执行程序的过程 :I.加载。class文件   ,II.管理并分配内存  ,III.执行垃圾收集

JRE(java运行时环境)由JVM构造的java程序的运行环境 

 

具体详情:JVM原理和调优

 

5、Mysql的事物隔离级别?

答:Mysql的事物隔离级别 其实跟 Spring的事物隔离级别一样,都是1、Read Uncommitted(读取未提交内容), 2、Read Committed(读取提交内容),3、Repeatable Read(可重读),4、Serializable(可串行化)    具体参照:mysql事物隔离级别

 

6、Spring的原理

答:Spring的核心是IOC和AOP  ,IOC是依赖注入和控制反转, 其注入方式可分为set注入、构造器注入、接口注入等等。IOC就是一个容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。简单理解就是:JAVA每个业务逻辑处理至少需要两个或者以上的对象协作进行工作,但是每个对象在使用它的合作对象的时候,都需要频繁的new 对象来实现,你就会发现,对象间的耦合度高了。而IOC的思想是:Spring容器来管理这些,对象只需要处理本身业务关系就好了。至于什么是控制反转,就是获得依赖对象的方式反转了。
AOP呢,面向切面编程,最直接的体现就是Spring事物管理。至于Spring事物的相关资料,就不细说了,参考:Spring注解式事物管理

 

7、谈谈你对NIO的理解

答:IO是面向流,NIO是面向缓冲 ,这里不细讲了,具体参照:Java NIO和IO的区别

 

8、ArrayList和LinkedList、Vector的区别?

答:总得来说可以理解为:.

     1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
     2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
     3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据

Vector和ArrayList类似,但属于强同步类,即线程安全的,具体比较参照:比较ArrayList、LinkedList、Vector

 

9、随便说说几个单例模式,并选择一种线程安全的

答:单例的类别:懒汉、饿汉、枚举、静态内部类、双重校验锁 等等 , 选择线程安全我选最后一种,双重校验锁。  具体实现方式参照:Java:单例模式的七种写法

 

10、谈谈红黑树

答:算法和数据结构一直是我薄弱之处,这方面说自己补吧,成效不大,这里我就推荐一个:红黑树

 

11、举例说说几个排序,并说明其排序原理

答:这里我就不细说了,大家自己看看 Java实现几种常见的排序算法

 

12、Mysql索引的原理

答:索引的作用大家都知道,就是加快查询速度,但是原理,我说不上来,这里直接看吧:Mysql索引工作原理

 

13、序列化的原理和作用

答:Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程,主要用于HTTP或者WebService接口传输过程中对象参数的传播,具体可参看:Java序列化机制和原理

 

二、并发及项目调优

1、说说线程安全的几种实现方式?

答:什么是线程安全? 我的理解是这样的,一个对象被多个线程同时访问,还能保持其内部属性的顺序性及同步性,则认定为线程安全。实现线程安全的三种方式:被volatile、synchronized等关键字修饰,或者使用java.util.concurrent下面的类库。  至于前两者的关系,参考:synchronized和volatile的用法区别

 

2、方法内部,如何实现更好的异步?

答:我们知道异步其实就是让另一个线程去跑,那么如何创建线程?  第一种直接new Thread ,第二种new 一个实现Runnable接口的实现类。 第三种,通过线程池来管理创建等 ,这里说到更好的实现异步,那就是说我们在方法内部避免频繁的new 线程,就可以考虑线程池了。 那么线程池如何创建? 这里可以new 一个线程池,但是需要考虑单例,或者在程序初始启东时,就创建一个线程池,让他跑着,然后在具体方法的时候,通过线程池来创建线程,实现异步

 newFixedThreadpool 固定大小的线程池  newSingTreadExcutor 单线程 线程池  newCacheThreadPool  可变线程池  new SceduletedTreadpool 可缓存线程池

 

3、项目中为何要用缓存?如何理解nginx + tomcat + redis 集群缓存?
答1:最直接的表现就是减轻数据库的压力。避免因为数据读取频繁或过大而影响数据库性能,降低程序宕机的可能性
答2:nginx常用做静态内容服务和代理服务器,直面外来请求转发给后面的应用服务。nginx本身也能做缓存,比如静态页面的缓存什么的。而tomcat是应用服务器,处理JAVA WEB程序功能等等 。你也可以这么理解,假设把用户的请求当做是一条河流,那么nginx就相当于一个水利工程,tomcat相当于一条条分流的支流,而redis 相当于支流旁边的一个个水库。 当你洪水来了,nginx根据你每条支流的承受力度分发不同的水流量,在确保程序正常运行的情况下,分发给每条支流(tomcat)不同的水流量。而redis相当于一个个支流的水库,存储水源,降低压力,让后面的水量平稳。


4、日常项目中,如果你接手,你准备从哪些方面调优?
答:这个呢首先是了解哪些需要优化,需要优化肯定是项目性能遭遇瓶颈或者猜测即将遭遇了,我们才会去考虑优化。那么怎么优化?
a、扩容 ,扩容的理解,就是扩充服务器并行处理的能力,简单来说就是加服务器,增加处理请求的能力,例如增加nginx 、tomcat等应用服务器的个数,或者物理服务器的个数,还有加大服务器带宽等等,这里考虑的是硬件方面
b、调优 ,调优,包括系统调优和代码调优 。 系统调优就是说加快处理速度,比如我们所提到的CDN、ehcache、redis等缓存技术,消息队列等等,加快服务间的响应速度,增加系统吞吐量,避免并发,至于代码调优,这些就需要多积累了,比如重构、工厂等, 数据库调优的话这个我不是很懂,只知道索引和存储过程,具体参考:Mysql数据库调优21个最佳实践  ,其他数据库调优方面就各位自己找找吧

 

5、谈谈你对分布式的理解

答:个人理解:分布式就是把一个系统/业务 拆分成多个子系统/子业务 去协同处理,这个过程就叫分布式,具体的演变方式参考:Java分布式应用技术架构介绍

 

6、Redis实现消息队列

答:Redis实现消息队列     、参考2

 

7、另总结多线程相关面试题50道

 

8、分享一个调优工具和方案:如何利用 JConsole观察分析Java程序的运行,进行排错调优

 

之前的面试总结:面试题总结——JAVA高级工程师

之前的技术问答:技术问答 也提到了一些面试的经验和知识点

 

三、手写代码题(包含sql题)

1、假设商户表A(id , city )  ,交易流水表B (aid, amount , time)   这里的time代表交易时间,  请用sql写出查询每个城市每个月的销售业绩(答案可在评论里回复)

 

2、假设有一个数组 A ,int[] A = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 ...  N};   原来是需要查出大于0的数组,但是由于传参错误或者其他原因,导致查出0和负数了,现在要求在不使用新数组和新集合的情况下(即只使用这个A数组,因数组数据比较大,且只能用一次循环) 实现正数放到数组的前面,小于等于0的数放到数组的末尾(答案可在评论里回复)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java基础笔试面试以及答案 1. 什么是Java语言的特点? 答:Java语言的特点是简单易学、面向对象、平台无关性、可靠性、安全性等。 2. 什么是Java虚拟机(JVM)? 答:Java虚拟机是一个能够执行Java字节码的虚拟计算机,能够将Java字节码转换为底层操作系统能够识别的二进制码执行。 3. 什么是Java的静态绑定和动态绑定? 答:Java的静态绑定在编译期确定,是通过对象的引用类型或参数类型确定方法的调用。Java的动态绑定在运行期确定,是通过对象的实际类型确定方法的调用。 4. 什么是自动装箱和拆箱? 答:自动装箱是指将基本类型自动转换为对应的包装类类型,例如int转换为Integer。拆箱则是将包装类类型自动转换为对应的基本类型,例如Integer转换为int。 5. 什么是Java的反射机制? 答:Java的反射机制是指在运行时对类的属性、方法等进行分析的能力。通过反射可以在程序运行时动态加载类、创建对象、调用方法等。 6. 什么是Java的异常处理机制? 答:Java的异常处理机制是指在程序运行时遇到错误或异常时捕获错误信息并进行处理的能力。通过try-catch-finally语句块可以捕获异常,并在finally块中进行清理操作。 7. 什么是Java的多线程? 答:Java的多线程是指在同一个程序中同时执行多个线程,每个线程独立运行并可以互相通信。Java的多线程通过继承Thread类或实现Runnable接口来实现。 8. 什么是Java的集合框架? 答:Java的集合框架是一组接口、类和算法,用于存储、处理和搜索对象的集合。Java的集合框架分为List、Set、Queue和Map等不同类型的集合类。 9. 什么是Java的注解? 答:Java的注解是一种程序中的元数据,用于为程序元素(例如类、方法、字段等)添加额外的信息和标记。Java的注解是通过@符号和注解名来使用的。 10. 什么是Java的泛型? 答:Java的泛型是指在编译期间不需要指定具体类型的能力,可以编写适用于多种类型的代码。Java的泛型可以通过类型参数来实现,例如List<T>表示一种类型为T的List集合类。 ### 回答2: Java 是目前应用最广泛的编程语言之一,因此 Java 基础知识的考核在招聘面试中是非常重要的一个环节。下面介绍一些常见的 Java 基础笔试面试及其答案。 1. Java 中的基本数据类型有哪些? Java 中的基本数据类型包括 byte、short、int、long、float、double、char、boolean 等 8 种基本数据类型。 2. String 和 StringBuffer 的区别是什么? String 类是不可变的对象,即一旦创建后其值就不能被修改。而 StringBuffer 类是可变的对象,可以在原有对象的基础上进行修改。 3. Java 中的四种访问修饰符是什么? Java 中的四种访问修饰符分别为 public、protected、default 和 private。 public 修饰符可以被任何类访问,protected 修饰符只能被本身类及其子类和同一包中的类访问,default(即不写修饰符)修饰符只能被同一包中的类访问,private 修饰符只能被本身类访问。 4. static 关键字是什么意思? static 是一种修饰符,可以修饰变量、方法和类。当 static 修饰变量时,表示该变量是类变量,所有该类的实例共享该变量,可以通过类名和实例访问;当 static 修饰方法时,表示该方法是类方法,可以直接通过类名调用,不需要实例化;当 static 修饰类时,表示该类是静态内部类。 5. Java 中的重载和重写有什么区别? 重载(overload)是指在同一个类中,允许定义多个同名的方法,只需改方法的参数即可,但返回类型可以相同也可以不同,编译器会根据传入的参数类型和数量来判断需要调用哪个方法;重写(override)是指子类实现了父类中的同名方法,实现方式和参数必须完全一样,但返回类型可以相同也可以是父类方法返回类型的子类型。 以上是常见的一些 Java 基础笔试面试及其答案,希望能对大家有所帮助。 ### 回答3: Java是目前世界上应用最广泛的编程语言之一,它具有可靠性高、移植性强、安全性好、易于学习和使用等特点。在Java学习过程中,基础知识扎实是非常关键的,下面就一些常见的Java基础笔试面试做一个简单的讲解。 一、Java中的常用注释方式有哪些? Java中常见的注释方式有三种,分别是单行注释、多行注释和文档注释。 //单行注释 /*多行注释*/ /** 文档注释 */ 二、Java中的变量类型分为哪几种? Java中的变量类型包括基本数据类型和引用数据类型两种。 1.基本数据类型: byte,short,int,long,float,double,char,boolean。 2.引用数据类型: 数组、类和接口。 三、Java中的访问修饰符有哪些? Java中的访问修饰符包括public、protected、private和default四种。 1.public:公共访问,任何地方都可以访问。 2.protected:受保护的访问,同一包内和子类可以访问。 3.private:私有访问,只有本类可以访问。 4.default:缺省访问(即不加访问修饰符),同一包内可以访问。 四、Java中的多态性是什么? Java中的多态性是指一个类型的实例在不同的情况下表现出不同的行为。Java中的多态性主要体现在方法的重载(Overloading)和方法的重写(Overriding)上。 1.方法的重载:指在一个类中定义多个同名方法,但参数的个数、类型或顺序不同。 2.方法的重写:指在子类中重写父类的方法,方法名、参数类型和返回值类型必须与父类中的方法相同。 五、Java中的类和对象的关系是什么? Java中类定义了对象的特征和行为,对象是类的一个实例,可以通过new关键字创建一个对象。类中的属性和方法可以被对象所访问和调用。类用来定义对象的共性,而对象用来表示现实世界中具体的事物。 以上就是关于Java基础常见的笔试面试以及答案。当然,在学习Java中不光局限于这些基础知识点,还需要注意编译原理、JVM内存管理、并发编程等其他方面的知识点。总之,通过大量的实践和练习,才能真正理解和掌握Java这门编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值