当前位置:网站首页>2022年8月初济南某外包公司全栈开发面试题整理
2022年8月初济南某外包公司全栈开发面试题整理
2022-08-02 10:32:00 【举杯同庆】
1. 前端
我前端平时用vue,html、css和java script、jquery等都会一些,基本上都是现用先查,不太专业,前后端占比的话算是三比七吧,工作内容很多是写后端rest接口。
1.1 js == 和===区别?
a === b 是最简单的。如果 a 和 b 的类型不同,那么一定会返回 false。而 a == b 则要灵活得多。JavaScript 会尝试调整 a 和 b 的类型,例如若 a 为字符串 b 为数字,则将字符串先转化为数字再与 b 比较,等等。
除了判断 x == null,因为即将 x == null 是 x === null || x === undefined 的缩写
简而言之就是 " == " 只要求值相等; " === " 要求值和类型都相等
1.2 es6有什么新特性
- let、const定义变量
- ES6允许按照一定的模式从数组和对象中提取值,对变量进行赋值,称为解构赋值
const arr = ['张学友', '刘德华', '黎明', '郭富城'];
let [zhang, liu, li, guo] = arr;
// 内容中可以直接出现换行符
let str = `<ul> <li>沈腾</li> <li>玛丽</li> <li>魏翔</li> <li>艾伦</li> </ul>`;
// 变量拼接
let lovest = '魏翔';
let out = `${
lovest}是我心目中最搞笑的演员!!`;
console.log(out);
- 模板字符串
ES6 引入新的声明字符串的方式 `` --内容中可以直接出现换行符
变量拼接 ---语法:`${
内容 }`
// 内容中可以直接出现换行符
let str = `<ul> <li>沈腾</li> <li>玛丽</li> <li>魏翔</li> <li>艾伦</li> </ul>`;
// 变量拼接
let lovest = '魏翔';
let out = `${
lovest}是我心目中最搞笑的演员!!`;
console.log(out);
- 简化对象写法
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。
const school = {
name, // name : name, 简化成name
improve(){
// improve: function(){ 简化而来
console.log("我们可以提高你的技能");
}
}
- 箭头函数 : () => { }
- … 三个点扩展运算符
- 引入了Symbol数据类型
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型。
Symbol 的值是唯一的,用来解决命名冲突的问题;Symbol 定义的对象属性不能计算和遍历 ,但是可以使用Reflect.ownKeys 来获取对象的所有键名
数据类型共有:undefined、string、symbol、object、null、number、boolean
2. 后端
2.1用的java版本是什么,有什么新特性
具体用的版本不清楚,反正大于java8(查了一下java8已经渐渐被java10/java11给镇压了,因为java11的G1垃圾收集器有更新的默认值和更高的性能)
java8的新特性:
- Java 8 语言中引入的一种新的语法元素和操作符 “->” , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:
左侧:指定了 Lambda 表达式需要的参数列表
右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能。 - Stream API
Stream 和 Collection 集合的区别:
Collection 是一种静态的内存数据结构,而 Stream 是有关计算的。前者是主要面向内存,存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。
Stream 的操作三个步骤
1- 创建 Stream
一个数据源(如:集合、数组),获取一个流
2- 中间操作
一个中间操作链,对数据源的数据进行处理,如filter() / distinct() / limit() / map()映射 / sorted()排序
3- 终止操作(终端操作)
一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用
如allMatch、anyMatch()、findFirst()、count()、max(Comparator c)、forEach() 匹配与查找
reduce() collect()
- Optional 类
Optional 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表
这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不
存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。 - 方法引用和构造器引用 语法 对象::方法名 或者 构造器引用 ClassName::new
- 函数式接口
只包含一个抽象方法的接口,称为函数式接口。 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。
函数式接口与Lambda表达式的关系:在Java8中,Lambda表达式就是一个函数式接口的实例。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式来表示。所以以前用匿名实现类表示的现在都可以用Lambda表达式来写。
2.2JDK8对HashMap做了哪些优化?
- jdk8中添加了红黑树,当链表长度大于等于8的时候链表会变成红黑树
- 链表新节点插入链表的顺序不同(jdk7是插入头结点,jdk8因为要把链表变为红 黑树所以采用插入尾节点)
- hash算法简化 ( jdk8 )
- resize的逻辑修改(jdk7会出现死循环,jdk8不会)
2.3 BigDecimal怎么初始化?
dubbo num = 0.88;
BigDecimal b = new BigDecimal(num); //存在精度确实风险,容易导致业务逻辑异常
优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,其实valueOf底层调用的还是toString方法
2.4 spring版本? aop ioc 两个概念怎么解释?
IOC
:控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是由调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。AOP
:面向切面编程。(Aspect-Oriented Programming)
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理。
2.5 springBoot项目是怎么 启动的?
第一种启动方式 @EnableAutoConfiguration
@EnableAutoConfiguration 作用是开启自动装配,帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。
第二种启动方式 @ComponentScan
@ComponentScan() 注解作用:根据定义的扫描路径,将符合规则的类加载到spring容器中,比如在类中加入了以下注解 @Controller、@Service、@Mapper 、@Component、@Configuration 等等;
2.6 如何通过aop进行统一异常处理
我们写的代码难免有些运行错误,通常情况下,我们需要对错误进行包装,不能直接返回异常信息发给前端。
但是我们的前端很容易臃肿,我们可以使用AOP来解决这种问题
(1)环境配置
在pom.xml中添加依赖的包
写一个切换的处理类,加上@Aspect注解,重写before() / Around / AfterReturning 等方法
2.7 事务在service层配置后controller层生效吗?事务失效的情况
3. 持久层框架及Linux命令
3.1hibernate 与mybatis优缺点
3.2mybatis框架如何实现一对多查询
3.3hibernate支持原生sql吗
3.4数据懒加载
3.4linux查看端口号命令
3.4查询.log结尾文件
4. 非技术话题
英语学习,是否能适应英文办公环境
是否能适应全栈开发,他们公司项目部门由前后端分离,但是基本上还是一人搞定前后端
以上没有答案的题目我后面几天再补充,今天有点晚了,先这样,晚安
边栏推荐
- 众城优选系统开发功能
- Long battery life or safer?Seal and dark blue SL03 comparison shopping guide
- The ggline function of the R language ggpubr package visualizes grouped line graphs, the add parameter is mean_se and dotplot to visualize line graphs of different level averages, and adds error bars
- TimerTask(addin timer语音)
- R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化、使用diff函数计算对数化后的时间序列数据的逐次差分(计算价格的对数差分)
- 全方位剖析Numpy中的np.diag源代码
- R语言ggpubr包的ggbarplot函数可视化分组柱状图、设置add参数为mean_se可视化不同水平均值的柱状图并为柱状图添加误差线(se标准误差)、position参数自定义分组柱状图分离
- 关于#oracle#的问题,如何解决?
- 从零开始Blazor Server(5)--权限验证
- Jay Chou's new song is released, crawl the "Mojito" MV barrage, and see what the fans have to say!
猜你喜欢
从众多接口中脱颖而出的最稳定的接口——淘宝详情api
21年毕业转行软件测试,从0收入到月薪过万,我真的很幸运...
多大数量级会出现哈希碰撞
【面向校招】Golang面试题合集
有奖征集|TaoCloud&宝德联合举办全闪POC!
The heavyweights are coming!Spoilers for the highlights of the Alibaba Cloud Life Science and Intelligent Computing Summit
yolov7 innovation point
Spearman's correlation coefficient
Verilog的随机数系统任务----$random
Linux system uninstall, install, upgrade, migrate clickHouse database
随机推荐
Alibaba CTO Cheng Li: Alibaba Open Source History, Concept and Practice
开源一夏 | GO语言框架中如何快速集成日志模块
R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化、使用diff函数计算对数化后的时间序列数据的逐次差分(计算价格的对数差分)
Weak yen turns game consoles into "financial products" in Japan: scalpers make big profits
R语言ggplot2可视化:使用ggpubr包的ggbarplot函数可视化水平柱状图(条形图)、使用orientation参数设置柱状图转置为条形图
LayaBox---TypeScript---JSX
关于#oracle#的问题,如何解决?
行为型模式-模板方法模式
sqlmap安装教程用w+r打开(sqlyog安装步骤)
【术语科普】关于集成工作台那些难懂的词儿,看这篇秒懂!
DVWA 通关记录 2 - 命令注入 Command Injection
Verilog's random number system task----$random
MySql千万级分页优化,快速插入千万数据方法
R language ggplot2 visualization: based on the fill parameter and shape parameter in the aes function, custom draw a grouped line chart and add data points (scatter points), use the legend.position fu
games202:三,实时环境光照IBL + PRT
循环结构--do-while循环
LayaBox---TypeScript---Three slash instructions
牛客刷题——剑指offer(第三期)
零代码工具推荐---HiFlow
List-based queuing and calling system