当前位置:网站首页>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. 非技术话题
英语学习,是否能适应英文办公环境
是否能适应全栈开发,他们公司项目部门由前后端分离,但是基本上还是一人搞定前后端
以上没有答案的题目我后面几天再补充,今天有点晚了,先这样,晚安
边栏推荐
猜你喜欢

Hello, my new name is "Bronze Lock/Tongsuo"

软件测试岗位巨坑?阿里在职7年测试人告诉你千万别上当

一体化在线政务服务平台,小程序容器技术加速建设步伐

Com多进程通信实现

8年软件测试工程师的感悟:与薪资相匹配的永远是实力

后管实现面包屑功能

有奖征集|TaoCloud&宝德联合举办全闪POC!

阿里CTO程立:阿里巴巴开源的历程、理念和实践

Shell script realizes multi-select DNS simultaneous batch resolution of domain name IP addresses (new update)

Long battery life or safer?Seal and dark blue SL03 comparison shopping guide
随机推荐
MySQL模糊查询性能优化
【术语科普】关于集成工作台那些难懂的词儿,看这篇秒懂!
You Only Hypothesize Once: 用旋转等变描述子估计变换做点云配准(已开源)
神通数据库,批量插入数据的时候失败
如何安装dosbox(pycharm详细安装教程)
The R language uses the rollapply function in the zoo package to apply the specified function to the time series in a rolling manner and the window moves, and set the align parameter to specify that t
Jay Chou's new song is released, crawl the "Mojito" MV barrage, and see what the fans have to say!
bgp与mpls综合实验
Oracle超全SQL,细节狂魔
LayaBox---TypeScript---Symbols
软件测试岗位巨坑?阿里在职7年测试人告诉你千万别上当
多线程(基础) - 4万字总结
Com多进程通信实现
The realization of the list
从幻核疑似裁撤看如何保证NFT的安全
未知内容监控
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
sqlmap安装教程用w+r打开(sqlyog安装步骤)
Linux系统卸载,安装,升级,迁移clickHouse数据库
LayaBox---TypeScript---Three slash instructions