面试基础练习

1.QT

GUI编程
QWdiegt、QMainWindow、QDialog
信号和槽(信号的发后者,具体信号,信号的接受者,信号的处理)

2.SpringBoot装配原理

通过@Enableautoconfigure将配置为@Configure下面的@Bean方法加载到Spring容器中

3.SpringBoot的常用注解

@Autowired 通过bytype装配
@Resourcce 默认通过byname实现,名字找不到在通过bytype实现
@RestController是@Controller和@RequestBody的结合
@RequestMapping包括@GetMapping、@PostMapping、@DeleteMapping、@PutMapping
@RequestParam请求参数
@Service
@Mapper或者@Repository

4.单例模式和原型模式

单例:确保类只有一个实例,并且对所有的bean的请求,只要id与该bean定义相匹配,则会返回bean的同一实例
原型:属于对象的创建模式,每一次请求都相当于一个new操作

5.Linux指令

ls 查看当前文件夹下文件内容
pwd 输出当前工作路径
cd 进入
mkdir 创建文件夹
touch 创建文件
rm 删除文件
clear 清屏
tar	打包
gzip 压缩
find 查找
ln 硬链接
ln -s 软连接
ps aux 显示进程信息
ps -ef 显示进程号
apt 安装包管理工具
sudo 不需要切换到root目录下的特权命令
mv 移动
cp 复制
chmod 授权 chmod 777 755 644 
chown 修改拥有者
chgrp 修改文件所属组
tree 以树形查看文件结构
grep 文本搜索
ping 查看主机之间的连接状态
ifconfig 查看当前网卡配置信息
netstat 查看连接状态
shutdown 关机
exit 推出
vim a.java
:wq
more a.java 从第一页看
less a.java 从第一页看
cat a.java 从最后一页看
head a.java 查看文件的前十行
tail a.java 查看文件的后十行
kill 杀死进程
free 查看内存信息
top 查看负载信息
echo 在shell脚本中作为一个输出

6.计算机网络

1.OSI七层模型
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

2.Http和Https的区别
80 443
TCP协议 身披SSL的Http
Https加入了认证和加密,需要证书,资源消耗比Http大

3.对称加密和非对称加密
对称加密:加密和解密使用同一个密钥
非对称加密:不需要发送来解密的私钥

4.TCP三次握手和四次挥手
三次握手:
1.客户端向服务器发送syn包,并进入syn_sent状态,等待服务器确认
2.服务端收到客户端发送的syn包之后,服务端向客户端发送syn+ack包,并且进入syn_recv状态
3.客户端收到服务端发送的syn+ack包,向服务端发送ack包,发送完毕后,二者进入established状态,完成三次握手。

四次挥手:
1.客户端向服务端发送fin报文段
2.服务端收到fin报文段后,发送ack包
3.服务端发送fin报文段
4.客户端收到fin报文段后,向服务端发送ack,彻底释放

5.get和post的区别
(1)get一般用于从服务器上获取资源,post一般用于更新服务器上的资源
(2)get请求数据放在Http报文的请求头中,post请求数据放在Http报文的请求体中
(3)get的传参长度有限制为2048个字符,post则没有限制
(4)get的安全性低,post的安全性高

6.Tcp和Udp的区别
(1)Tcp是面向连接的,Udp是无连接的
(2)Tcp是可靠的,Udp是不可靠的
(3)Tcp支持一对一通信,而Udp支持一对一、一对多、多对一和多对多
(4)Tcp传输数据有序,Udp不能保证传输数据的有序性
(5)Tcp的传输速度慢于Udp

7.输入网址到获得页面的过程
(1)浏览器查询DNS,获取域名对应的IP地址
(2)浏览器获得IP地址后。浏览器向服务器请求建立连接,发起三次握手
(3)TCP/IP连接建立起来后,浏览器向服务器发送Http请求
(4)服务器收到请求后,根据路径参数映射到特定的处理器
(5)Controller调用Service调用Mapper,将返回结果返回给浏览器
(6)浏览器将请求到的资源数据渲染界面,最终呈现给用户一个完整的界面

8.IP地址的划分
(1)判断对主机数的要求
(2)计算掩码
(3)计算网络地址
(4)计算广播地址
(5)计算网络的主机地址

9.子网掩码的目的
用来判断IP地址哪一部分是网络,哪一部分是主机

10.session和cookie的对比
(1)cookie一般浏览器关闭就消失,session默认存储30分钟
(2)session的实现通常依赖于cookie机制,通过cookie机制回传sessionId
(3)cookie存在安全隐患,session存在服务器端相对安全
(4)单个cookie存储数据不能超过4K,session存储数据没有上限

11.常见状态码
1.1xx:请求处理中
2.2xx:200,请求成功ok
3.3xx:重定向
4.4xx:400 请求存在语法错误 403 拒绝请求 404 访问的页面不存在
5.5xx:500服务器错误 503服务器维护

12.转发和重定向
转发:浏览器一次请求,一次响应
重定向:两次请求,两次响应 应用场景:(1)跳转到其它应用(2)提交表单,防止表单重复提交

13.IP首部协议
20个字节
第一个四字节:版本号
最后两个四字节:源IP地址、目的IP地址

7.Vue

1.Vue的优点
采用MVVM,视图和模型不能直接通信,只能通过viewmodal互动,所以只关注对数据的修改就好

2.Vue的生命周期
(1)先创建created(数据初始化)
(2)再挂载也就是mounted
(3)数据更新走updated
(4)数据销毁走destoryed
beforecreated、created、beforemounted、mounted、beforeupdate、update、beforedestory、destory

3.同步和异步
同步:客户端需要等待服务器响应才能进行后续操作
异步:客户端不需要等待服务器响应就可以执行其他操作

4.进程和线程
进程是资源分配的最小单位
线程是cpu调度的最小单位
进程=火车 线程=车厢
一个进程可以有多个线程,同一进程的多个线程可以数据共享,不同进程很难共享数据

5.v-if和v-show的区别
v-if:条件为true时创建dom,条件为false是销毁dom
v-show:控制display属性来进行dom的显示与隐藏(频繁操作或者大项目)

6.Vue指令
v-on:事件绑定@
v-bind:数据绑定:
v-modal:双向绑定
v-for:循环绑定v-for=(item,index)in list :key=item.id

7.子父组件传值
父向子:在子组件中定义props来接父组件传来的值
子向父:子组件中使用$emit函数,在父组件绑定个事件,之后再method写个事件进行接收

8.数据库

1.数据库多表查询方式
(1)嵌套查询
(2)连接查询
(3)子查询

2.数据库如何性能优化
(1)sql优化
(2)加缓存
(3)分库分表
(4)读写分离

3.Redis的数据类型
String
List
Hash
Set
Zset
Bitmaps 位图
Hyperloglogs 基数统计
geospatital 地理位置//底层是Zset

4.Redis持久化
RDB:快照,生成的文件时dump.rdb
拥有两种方式save和bgsave
save:主线程中执行
bgsave:创建一个子进程(默认)
AOF
将指令记录下来,保存到appendonly.aof文件中,不适合大数据量

5.缓存穿透(查不到)
用户查询一个数据,发现redis中没有,于是向持久层数据库查询,发现也没有
解决方案:(1)布隆过滤器(2)缓存空对象

6.缓存击穿(量太大,热点key过期,空档期全部砸到数据库)
解决方案:(1)设置热点数据永不过期(2)加互斥锁

7.缓存雪崩(数据大批量到期,查询数据量巨大,数据库压力过大)
解决方案:(1)构建redis集群(cluster集群,gossip协议)(2)数据与热,让缓存失效的时间尽量均匀

8.redis过期策略
(1)定期策略:redis每隔一段时间从过期的key集合中,随机抽取一些key,检查是否过期,过期的做删除处理
(2)惰性策略:redis在key被访问的时候检查key是否过期,如果过期则删除

9.如何实现redis的高可用
(1)主从模式:resid部署多台机器,主节点负责写,从节点负责读,包括全量复制和增量复制
(2)哨兵模式:自动选取master
(3)集群模式:cluster集群,通过gossip协议

10.分布式锁
场景:秒杀、抢红包
setnx和expire分开写
redission解决分布式锁过期释放,业务没执行完的问题

11.redis问什么单线程
用单个cpu绑定一块内存的数据,数据全在内存中,单线程的操作就是效率最高的

12.redis集群的分片机制
运用虚拟槽,把key根据哈希函数映射

13.如何判断数据库中的索引有没有生效
(1)在查询语句前加上EXPLAIN关键字
(2)执行SHOW INDEXES语句

9.python常用库

numpy:数组计算
scipy:在numpy基础上用于科学计算
opencv:计算机视觉库
pytorch:cpu和gpu加速
pyqt5:界面
pandas:数据分析库
matplotlib:绘图库
tensorflow:通过张量进行数据传递和计算

10.spring

1.ioc(控制反转)
获得依赖对象的方式反转了,底层是控制反转,实现方式是依赖注入,所谓的ioc就是对象由spring来创建、管理和装配

2.aop(面向切面)
通知是面向切面的具体体现
before前置通知
after后置通知
around环绕通知

3.反射
反射是Java语言被视为动态语言的关键,允许在程序执行期间借助反射API获得任何类的内部信息,并且能操作任意对象的内部属性和方法
class.forname

11.Java八股文

1.接口和抽象类区别
相同点:
(1)二者都不能被实例化
(2)实现接口和继承抽象类的方法,必须实现这些抽象方法
不同点:
(1)接口中不能包含代码块,抽象类中可以包含代码块
(2)接口中没有构造方法,抽象类中有构造方法
(3)接口中的成员变量必须用public static final修饰且必须赋值,抽象类中不要求

2.重载和重写
重载发生在一个类中,方法名相同,形参列表、返回类型、权限修饰符可以不同
重写发生在子类中,方法名、形参列表、返回类型都相同,权限修饰符要大于父类,异常声明范围要小于父类,final和private修饰的方法不可重写

3.==和equals的区别
==比较基本数据类型,比较的是值,比较引用数据类型,比较的是地址
equals本质上与==一样,但是重写了equals方法,比较的是字符值,重写equals必须重写hashcode

4.如何导致的内存溢出,内存溢出如何解决
问题:
1.堆:对象创建不被挥手,加载的对象越来越多
2.栈:方法调用过多,一般是递归不当
解决:
1.修改jvm启动参数,直接增加内存
2.对代码进行分析,找出内存溢出的部分

5.HashMap和HashTabel区别
(1)HashMap底层是数组+链表+红黑树,HashTable底层是数组+链表
(2)HashMap线程不安全,HashTbale线程安全
(3)HashMap的key允许为空,HashTable的key不允许为空

6.ArrayList和LinkList区别
ArrayList动态数组,查找快,添加效率低(默认为10,1.5倍扩容)
LinkList链表,查找满,添加效率高

7.String、StringBuffer、StringBuilder
操作少量字符数据用String
单线程大量数据StringBuilder
多线程大量数据StringBuffer

8.深拷贝和浅拷贝
浅拷贝:复制对象的引用,新旧对象共享一块内存
深拷贝:复制一摸一样的对象,不共享内存

9.死锁
多个线程在执行过程中,抢夺资源
AQS锁(state关键字实现)

10.多线程的使用
继承Thread类,重写run方法,调用start开启
实现Runnable接口,实现run方法,调用start启动

11.CS和BS区别
CS:类似于手机APP,需要下载才能使用
BS:PC端网站

12.JDK、JRE、JVM
1.JDK是Java开发工具包,编写Java程序,需要安装JDK
2.JRE是运行环境,运行Java程序,安装JRE
3.JDK包含JRE

13.谈谈你对JVM的理解
JVM是Java虚拟机,是一个虚拟的计算机,可以执行Java字节码文件,并主要提供了跨平台、类加载、内存管理和垃圾回收。
1.跨平台:通过JVM,Java程序可以在不同的操作系统上运行,只需将Java源代码编译成字节码文件,然后在不同操作系统的JVM上运行即可。
2.类加载:JVM通过类加载器将字节码文件加载到内存中
	双亲委派机制:
	(1)一个类加载器收到类加载的请求,并不会自行先去加载,而是把请求托付给父类的加载器去加载
	(2)如果父类加载器还存在父类加载器,则进一步向上委托,请求最终达到顶层的启动类加载器
	(3)如果父类加载器可以完成加载,就成功返回,如果完不成加载任务,子类才会尝试自己去加载
3.内存管理和垃圾回收
(1)将内存分为不同的区域,包括堆、栈、方法区等。堆用于存储对象实例,栈用于存储方法调用和局部变量。垃圾回收机制是回收不在使用的对象,释放内存空间。

14.垃圾回收算法
(1)标记-清除:标记无用对象,然后进行清除回收
(2)标记-整理:让所有存活的对象向一端进行移动,清除掉端边界以外的内存
(3)标记-复制:将内存分为两份,前一份存满之后,将存活的对象放到后面的内存中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值