兴业数金-23届秋招-后端一面

1、为什么将栈和堆划分开?
第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。
第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有效的数据交互方式(如:共享内存),另一方面,堆中的共享常量和缓存可以被所有栈访问,节省了空间。
第三,栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划分。由于栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可。
第四,面向对象就是堆和栈的完美结合。其实,面向对象方式的程序与以前结构化的程序在执行上没有任何区别。但是,面向对象的引入,使得对待问题的思考方式发生了改变,而更接近于自然方式的思考。当我们把对象拆开,你会发现,对象的属性其实就是数据,存放在堆中;而对象的行为(方法),就是运行逻辑,放在栈中。
2、集合有哪些接口、ArrayList与LinkedList的区别,ArrayList扩容机制、
(1)List,Set,Queue,Map
(2)ArrayList底层是数组,LinkedList底层是双向链表。
(3)初始化容量为10,添加元素时若超出容量,按当前容量的1.5倍扩容。
3、Java中实现双向链表的数据结构有哪些?
LinkedList,LinkedHashMap
4、TCP/IP协议
应用层、传输层、网络层、链路层

5、数据结构(寻字符串子串的算法)
只知道KMP算法
6、redis有哪些数据类型及其操作
String(set,get,del),List(LinkedList)(lpush,rpush,lpop,rpop),Hash(hset,hget,hdel),Set(sadd,srem),Zset
7、Mysql与Redis的区别?
            NOSQL和关系型数据库比较
                1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
                2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
                3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
                4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
8、mysql事务的特性?ACID
9、rabbitMQ如何防止消息丢失?
    (1)confirm消息确认机制:生产端投递消息一旦投递到RabbitMQ后,RabbitMQ就会发送一个确认消息给生产端
    (2)消息持久化
10、SpringBoot的特点,以及常用的注解有哪些?
(1)配置便捷,开箱即用,自动配置
(2)@SpringBootApplication,@Controller,@Entity,@Repository,@ResponseBody
11、有没有使用过docker?没有

#兴业数金面试##兴业数金校招#
全部评论
第一题回答的真的太好了,就凭第一题的回答,我觉得这面试也过了吧
6 回复 分享
发布于 2022-08-03 20:06
第一题答了这么多啊
1 回复 分享
发布于 2022-08-05 13:02
寻字符串子串的算法: 1、左端模式串匹配算法:暴力匹配,从字符串左端开始,逐个匹配(主要是回溯消耗时间) 2、KMP快速匹配算法(研究模式串):找出不匹配字符前的最长公共前后缀,移动模式串,将前缀移动到后缀的位置
点赞 回复 分享
发布于 2022-08-02 18:45
数据库也能存文件图片,blob
点赞 回复 分享
发布于 2022-09-17 10:29 广东

相关推荐

2024-12-14 15:22
门头沟学院 C++
647、回文子串://动态规划解法:布尔类型的二维dp数组        //dp[i][j]:区间范围[i,j](左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。        //递推公式:主要分为s[i]和s[j]相等和不相等的情况        //不相等时:dp[i][j] = false;        //相等时:        //1、i=j时为单个字符,所以dp[i][j] = true        //2、j-i=1时为两个相同的字符,所以dp[i][j] = true        //3、看dp[i][j]是否为true,可以由dp[i+1][j-1]推导出来        //初始化:全初始化为false,后面再去判断更新        //遍历顺序:由于dp[i][j]要由dp[i+1][j-1]推导出来,所有i从大到小,j从小到大遍历(因为是字符串区间,所以j一定要大于i)516、回文子序列://回文子序列不要求连续        //dp[i][j]:区间范围[i,j](左闭右闭)的子串的最长回文子序列        //递推公式:主要看s[i]和s[j]是否相等        //如果相等,则dp[i][j] = dp[i+1][j-1] + 2;//注意单个字符和两个字符的情况        //不相等,则dp[i][j] = max(dp[i+1][j], dp[i][j-1]);        //初始化:全初始化为0;        //遍历顺序i--,j++
点赞 评论 收藏
分享
评论
11
70
分享

创作者周榜

更多
牛客网
牛客企业服务