面试题

169 阅读4分钟

MySQL设计三大范式

第一范式:
    1.每一列属性都市不可再分的属性值,确保每一列的原子性
    2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据
第二范式:
    1.每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就把表拆分开来
第三范式:数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系

MySQL事务四大特性

原子性(Atomicity):
    事务就像"原子"一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
一致性(Consistency):
    一旦事务完成,不管成功的,还是失败的,整个系统处于数据一致的状态。
隔离性(Isolation):
    一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户取钱,通过事务的隔离性确保账户余额的正确性。
持久性(Durability):
    也称永久性,指事务一旦提交,对数据的改变就是永久的,不可以再回滚。

MySQL五大约束

1.主键约束:唯一性,非空性
2.唯一约束:唯一性,可以空但只能有一个
3.默认约束:该数据的默认值
4.外键约束:需要建立两表之间的关系
5.非空约束:设置非空约束,该字段不能为空

java多线程

1.什么是多线程?
    线程可以理解为在进程中独立运行的子任务
    多线程就是一个进程之中有多个线程
2.多线程的优势?
    解决了多部分同时运行的问题,提高效率
3.线程的弊端?
    线程太多会导致效率的降低,因为线程的执行依靠的是CPU
4.如何实现多线程?同步实现的方法有哪几种?
    1.如何实现多线程
        a.继承Thread类
        b.实现Runnable接口
    2.同步实现的方法有哪几种?
        a.sychronized
        b.wait
        c.notify
5.sleep()和wait()有什么区别?
    sleep会暂停此线程,让其他线程优先执行但到时后会自动恢复;wait将会让此线程进入等待锁定池,只有针对此对象发出notiy方法才会再次进入运行状态
6.请你说出所知道的线程同步方法
    1.wait():是一个线程进入等待状态,并释放所持有的对象lock
    2.sleep():是一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常
    3.notify():唤醒一个处于等待状态的线程
    4.notityAll():唤醒所有处于等待状态的线程
7.启动一个线程用run()还是start()?
    start()方法
    run()方法可以产生必须退出的标志来停止一个线程
8.java线程有哪几种基本状态?
    运行>就绪>挂起>结束

Vue

1.Vue是什么?
    Vue是一套前端开发框架,用来提高开发效率,增强开发体验
2.在项目开发中为什么要用Vue?
    在传统Web项目中我们搭建的项目都以html为基础,一旦项目改动或项目工程过大,代码的修改将及其繁琐,用Vue的话这些问题都不复存在
3.Vue在Web开发中有什么优势?
    1.数据绑定:vue会根据对应的元素,进行设置元素数据,实时绑定,在数据渲染及获取数据是及其方便。
    2.组件式开发:通过Vue的模块封装,他可以将各个模块进行拆分,变成单独的组件,然后通过数据绑定,调用对应模块组件,同时传入参数,即可完成对整个项目的开发

Rest风格

1.Rest规范
    a.强调HTTP应当以资源为中心,并且规范了资源URL的风格
    b.规范了HTTP请求动作(put,post等)的使用,具有对应的语义
2.遵循Rest有什么好处?
    a.URL可读性很强,具有自描述性
    b.资源描述与视图松耦合
    c.可提供的OpenAPI,便于第三方系统集成,提高互操作性
    d.如果提供无状态服务接口,可提高应用的水平扩展性
3.基本概念
    Rest是一种软件架构模式,核心概念包括:
        a.资源:URL
        b.表现:URl返回的值
4.Rest操作:
    Post:新增
    Delete:删除
    Get:查询
    PUT:修改

1.加锁方式
    a.Synchronized关键字
    b.显示Lock

Git和Svn

1.Git是什么?
    开源的分布式版本控制系统,可以有效、高速的出来很小到非常大的项目版本管理
2.Git和Svn的区别
    Git是分布式版本控制器,代码提交到本地,可以联网push到远程服务器也可以从服务器pull到本地
    Svn是集中式版本控制器,代码提交都需要提交到远程服务器上需要一直联网
    Git没有中心服务器的概念,每一个Git客户端都含有一个完整的代码仓库