Java实习生面试实战经验一

记录一下在面试中真实被问到的一下题目。答案是从教科书上和网络上筛选出来的。
1. 自我介绍

简单说一下个人的状况,,会使用的技术栈,曾做过的项目,求职意向。

2. 谈一谈你对集合的认识

集合有两大分支:Collection与Map,Collection下有List , Set, Queue三个分支接口;Map为独立接口

  • Set下有HashSet,LinkedHashSet,TreeSet
  • List下有ArrayList,Vector,LinkedList
  • Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
  • Collection接口下还有个Queue接口,有PriorityQueue类

这是在网络上能找到的最全的集合图解了,但是需要注意的是,Map与Collection并不是继承关系!他们两个没有关系!
在这里插入图片描述

3. 谈一下LinkedList与ArrayList的区别
  • ArrayList基于动态数组实现的非线程安全的集合;LinkedList基于双向链表实现的非线程安全的集合。
  • 对于随机index访问的get和set方法,一般ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标找到元素(时间复杂度:O(1));LinkedList要移动指针遍历每个元素直到找到为止(时间复杂度:O(n))。
  • 新增和删除元素,一般LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。
  • LinkedList集合不支持 高效的随机随机访问(RandomAccess)
  • ArrayList的空间浪费主要体现在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间来存储指针信息。

原文链接:https://blog.csdn.net/meism5/article/details/89845468

4. 谈一下HashMap与TreeMap

相同点:

HashMap非线程安全,TreeMap非线程安全

都继承了AbstractMap

不同点:

HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()(可以重写hashCode()和equals()),为了优化HashMap空间的使用,您可以调优初始容量和负载因子。

TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。

HashMap :适用于在Map中插入、删除和定位元素。Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

HashMap的结果是没有排序的。TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map中插入、删除和定位元素,HashMap是最好的选择。TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

原文链接:https://blog.csdn.net/zhangguofengqiang/article/details/52706237

5. Spring中的注解都有哪些

用于创建对象: @Component、@Controller、@Service、@Repository。@Component、@Repository、@Service、@Controller实质上属于同一类注解,用法相同,功能相同,区别在于标识组件的类型。 @Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的。

用于注入数据: @Value、@Resource、@Autowired、@Qualifier和@Primary

其他设置: @Scope、@DependsOn、@Lazy、@PostConstruct和@PreDestroy

原文链接:https://blog.csdn.net/u010648555/article/details/76299467
原文链接:https://blog.csdn.net/interestANd/article/details/115876108

6. Spring中用于支持JSON数据传输的注解是

@RequestBody:用于将请求体中的数据绑定到方法的形参中。该注解用在方法的形参上。
@ResponseBody:用于直接返回return对象。该注解用在方法上
@RestController:相当于@Conotroller+@RequestBody的作用,在@Controller位置上写了它,后面方法就不用再写@RequestBody

7. 谈谈你对cookie与session的认识

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。
而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。
  Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。
  由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
  Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
  除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
  Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
  虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
  区别:
  1、cookie数据存放在客户的浏览器上,session数据放在服务器上.
  2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
  3、设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
  4、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。
  5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
  6、两者最大的区别在于生存周期,一个是IE启动到IE关闭.(浏览器页面一关 ,session就消失了),一个是预先设置的生存周期,或永久的保存于本地的文件。(cookie)

8. 当浏览器禁用了cookie的话,怎么实现会话跟踪技术

URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。

9. 什么是超文本传输协议

超文本传输协议,就是我们平时常说的HTTP协议。
HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度来看,HTTP是面向事务的应用层协议,它是万维网上能够可靠地交还文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

10. HTTP与TCP的关系

TCP是面向连接的传输层协议,HTTP是面向事务的应用层协议。HTTP报文是使用TCP连接传送的。HTTP使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输。

11. 谈谈socket的认识

每一条TCP连接有两个端点。TCP连接的端点叫做套接字(socket)或插口。每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

12. HTTP请求报文的第一行有什么内容

请求报文的第一行“请求行”只有三个内容:即方法、请求资源的URL,以及HTTP的版本。

13. 网络安全中的密钥分配

对称密钥分配、公钥的分配

14. 二分查找法的思想

二分查找法,又称折半查找法,是一种效率较高的查找方法。二分查找法要求查找表有序,即表种元素按关键字有序,而且必须是顺序存储的。
首先,将给定的关键字k与有序表的中间位置上的元素进行比较,若相等,则查找成功;否则,中间元素将有序表分成两个部分,前一部分的元素均小于中间元素,而后一部分的元素则均大于中间元素。因此,k与中间元素比较后,若k小于中间元素,则应在前一部分中查找,否则在后一部分中查找。重复上述过程,直至查找成功或失败。

15. 最小堆

最小堆,也称小根堆或则小堆,结点(双亲)的键值总小于或等于任何一个孩子的键值,根结点是序列中的最小值。

16. 进程与线程的关系与区别

进程是系统资源分配的最小单位,线程是程序执行的最小单位。进程使用独立的数据空间,线程共享进程的数据空间。

17. 说说你在linux常用的一些指令
  • 目录文件管理
    cd 切换目录
    ls 列出目录
    pwd 现实当前路径
    mkdir 创建目录
    rmdir 删除路径
    cp 复制文件或目录
    mv 移动文件或目录
  • 文件属性管理(重点必问,亲身经历被问多次)
    chgrp 更改文件或目录的属组
    chown 更改文件或目录的属主
    chmod 更改文件或目录的读写执行权限
  • 文件内容的查看
    cat 从第一行开始顺序显示文件内容
    tac 从最后一行开始倒序显示文件内容
    nl 从第一行开始显示文件内容并附带行号
    more 分页查看文件(空格键下翻,可以显示当前的文件内容进度)
    less 分页查看文件(空格键下翻,可以支持用上下键来进行翻页,输入q退出)
    head 查看文件头部内容
    tail 查看文件尾部内容
  • 创建和写入文件
    touch 创建文件
    echo 文件内容写入
    vim 使用vim编辑器创建或写入文件
  • 用户管理
    cat /etc/passwd 查看用户基本信息
    useradd 添加用户
    userdel 删除用户
    usermod 修改用户
    passwd 设置用户密码/锁定指定用户/清除密码
    su 切换用户
    exit 返回之前用户
  • 用户组管理
    cat /etc/group 查看所有的用户组信息
    groupadd 添加用户组
    groupdel 删除用户组
    groupmod 修改用户组
  • 磁盘管理
    df 文件系统给磁盘使用情况统计
    du 查看指定文件或目录占用的磁盘空间大小
  • 进程管理
    ps 查看进程管理
    kill 杀死进程
  • 设置管理
    hostname 修改主机名
  • 其他命令
    screen 会话命令
  • 补充知识
    Linux内核包括:进程管理系统、内存管理系统、I/o管理系统、文件管理系统

查看文章:https://blog.csdn.net/BLU_111/article/details/109872535?spm=1001.2014.3001.5506

18. spring 的两大核心

IOC(控制反转)与AOP(面向切面编程)

Aspect Oriented Program, 面向(方面)切面的编程;Filter(过滤器) 也是一种AOP. AOP 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充. AOP 的 主要编程对象是切面(aspect), 而切面模块化横切关注点.可以举例通过事务说明.

IOC: Invert Of Control, 控制反转. 也称为 DI(依赖注入)其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源.作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式。IOC:把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转。

19.spring的@Bean注解的理解

@Bean 声明所起到的作用与 <bean>元素类似。由@Bean 注解的方法将会实例化、配置和初始化一个 新对象,这个对象将由 Spring 的 IoC 容器来管理。被 @Configuration 所注解的类则表示这个类的主要目的是作为 bean 定义的资源。被@Configuration 声明的类可以通过在同一个类的内部调用@bean 方法来设置嵌入 bean 的依赖关系。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值