Java面试之基本概念(一)

综合了网上的一些面试经,整理出来一部分资料,后续会有补充,希望大佬们多多指点!

  • 操作系统中heap和stack的区别(百度测试面有问)

首先heap是堆,stack是栈,stack的空间是由操作系统自动分配和释放,heap的空间是手动申请和释放的;heap的空间是手动申请和释放的,heap常用new字来分配;stack的空间有限,heap的空间是很大的自由区。在java中,如果只是声明一个对象,则在栈内存中为其分配地址空间,若将它实例化,则在堆内存中为其分配空间。

Obiect a =null;//只在栈内存中分配空间
Object b=new Object()//在堆内存中分配空间
  • 对象/关系 映射集成模块

object/relation mapping 也就是面向对象编程中的对象和关系数据库的关系的一个映射。是为了按照对象的概念进行开发和存取,也就是作为开发人员不必管数据库怎么存储,只需要知道保存的是对象就行了。

  • ACID

数据库事务正确执行的四个基本要素的缩写,包括原子性(atomiciy),一致性(consistency),隔离性(Isolation),持久性(Durability),否则在事务过程中无法保证数据的正确性

  • BS和CS的区别

BS是browser-server,通过浏览器去访问服务器

CS是client-server,通过客户端去访问服务器

  • cookie和session的区别

cookie数据存放在客户的浏览器上,session数据存放在服务器上

cookie的安全性不高,别人可以通过分析存放在本地上的cookie进行用户信息盗取;session会在一定时间保存在服务器上,当访问增多的时候会比较占用服务器的性能

  • cookie和session的联系:

session是通过cookie来工作的,session和cookie之间是通过$_COOKIE['PHPSESSID'] 来联系的,通过$_COOKIE['PHPSESSID'] 可以知道session的id,从而获取到其他的信息。

  • fail-fast与fail-safe机制有什么区别

fail-fast机制:

在遍历一个集合时,当集合结构被修改会抛出Concurrent Modification Exception fail-fast会在这两种情况抛出该异常: 单线程环境:集合被创建后,在遍历它的过程中修改了结构 多线程环境:当一个线程正在遍历这个集合而另一个线程对这个集合的结构进行了修改 如何检测:迭代器在遍历过程中是直接访问内部数据的,因此内部的数据在遍历的过程中无法被修改,为了保证不被修改迭代器内部维护了一个标记,mode,当集合机构发生改变的时候(添加删除或修改),mode会被修改,而迭代器的每次的hasNext()和next()方法都会检查该mode是否被改变,当检测到被修改时会抛出Concurrent modification excepetion

fail-safe机制:

任何对几个结构的修改都会在一个复制的集合上进行修改,因此不会抛出Concurrent modification exception

fail-safe机制有两个问题:

需要复制集合,产生大量的无效对象,开销大 无法保证读取的数据是目前原始数据结构中的数据

fail-safe和fail-fast的区别
  • get和post请求的区别(百度测试面有问)

一般是在浏览器中输入网址访问资源都是通过get方式,在表单提交中,可以通过Method来指定提交方式为post和get,默认为get提交,get一般用于获取/查询信息,而post一般都用于更新资源信息。

从设计初衷上来讲,GET用来实现从服务器端获取数据,POST用来实现向服务器端提出请求对数据做某些修改

从安全的角度来说,POST的请求只需要加body,而GET请求直接拼链接就可以,成本不同

  • 接口和抽象类的区别

一个类实现接口必须实现接口里面的所有方法,而且一个类可以实现多个接口(相当于多继承),接口和抽象类使用的关键字都不同,一个类只能继承一次,继承抽象类的话是可以不全部实现它的所有方法,但是你可以重写它的方法

抽象类中可以有实例方法和变量,可是接口中的方法全部都是要实例方法接口中不允许存在变量都是常量,换句话说接口就是彻底的抽象类

  • IOC的优点

IOC控制反转,是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。控制反转一般分为两种类型,依赖注入个依赖查找

IOC的优点是实现组件之间的解耦,提高程序的灵活性和可维护性

  • IO和NIO的区别

NIO即java non-blocking IO .NIO和IO有相同的作用和目的但是实现方式不一样,NIO用到的是块,所以NIO的效率要比IO高很多,在java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO;IO面型流,NIO面向缓冲

  • Java8/Java7为我们提供了什么新功能

Java 7:

  1. switch中可以使用字符串
  2. 泛型实例化类型自动推断,list<string> templist=new arraylist<>()
  3. 语法上支持集合,而不一定是数组 final List<Integer> list=[1,2,3,4]
  4. 新增一些获取环境信息的工具方法
File Syatem.getJavaIoTempDir();//IO临时文件夹
File System.getJavaHomeDir();//JRE的安装目录
File Systemm.getUserHomeDir();//当前用户目录
File System.getUserDir();//启动通过Java进程时所在的目录

Java 8:

  1. lambda表达式
  2. 函数式接口
  3. 允许给接口添加一个非抽象的方法实现(通过default关键字)
public Interface Formula{
    default double sqrt(int a){
        return Math.aqrt(a);  
     }
}

备注:问题整理来源于唐尤华

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java思维导图

Java并发编程之volatile关键字解析

文章来源:http://www.cnblogs.com/dolphin0520/p/3920373.html

9020
来自专栏java一日一条

从根源上解析 Java volatile 关键字的实现

也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。

8010
来自专栏大内老A

ASP.NET Core的配置(4):多样性的配置来源[上篇]

较之传统通过App.config和Web.config这两个XML文件承载的配置系统,ASP.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种...

21260
来自专栏java一日一条

从根源上解析 Java volatile 关键字的实现

也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。

5920
来自专栏Jimoer

JVM学习记录-线程安全与锁优化(一)

线程:程序流执行的最小单元。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I...

8020
来自专栏java一日一条

Java编程常见问题汇总2

这里有一个前提,就是文件大小不能讲JVM的heap撑爆。否则就等着OOM吧,尤其是在高并发的服务器端代码。最好的做法是采用Stream的方式边读取边存储(本地文...

9710
来自专栏高性能服务器开发

详解C/C++中volatile关键字

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volat...

14630
来自专栏JavaQ

Java方向如何准备BAT技术面试答案(汇总版)

这个主题的内容之前分三个篇幅分享过,导致网络上传播的比较分散,所以本篇做了一个汇总,同时对部分内容及答案做了修改,欢迎朋友们吐槽、转发。因为篇幅长度和时间的原因...

50190
来自专栏专注 Java 基础分享

使用 Synchronized 关键字

使用 Synchronized 关键字来解决并发问题是最简单的一种方式,我们只需要使用它修饰需要被并发处理的代码块、方法或字段属性,虚拟机自动为它加锁和释放锁,...

11330
来自专栏Golang语言社区

Go性能优化小结

做过C/C++的同学可能知道,小对象在堆上频繁地申请释放,会造成内存碎片(有的叫空洞),导致分配大的对象时无法申请到连续的内存空间,一般建议是采用内存池。Go ...

33130

扫码关注云+社区

领取腾讯云代金券