关于安全:面试题

4次阅读

共计 6499 个字符,预计需要花费 17 分钟才能阅读完成。

  1. 1 Spring Bean 是什么?

    在 spring 中由 Spring 创立和治理的对象称为 bean,
    bean 有相干的个性,例如懒加载,作用域,生命周期这些。
    懒加载就是提早加载,启动的时候,会创立所有对象,有些不用浪费资源,因而应用懒加载的形式。
    作用域:罕用的单例和多例,默认单例,多例去配置文件 scope 设置
    单:名字和类型雷同的 bean 对象的实例在 spring 容器中只能有一个
    多:每次 spring 从容器中获取对象都会创立新的对象,不须要懒加载

    2Spring 框架中的 bean 对象的生命周期?

    3AOP 的初始化?
    首先读取配置文件,生成 Advisor,PointCat 等文件信息。在容器创立 bean 的过程中,能够对 bean 进行拦挡替换,实现咱们想要进行增益的操作。最初,生成代理,返回给容器。

    4IOC 的初始化?
    1 resource 定位:指对 BeanDefinition 的资源定位过程。找到定义 Javabean 信息的 xml 文件。并将其封装成 Rescource 对象。
    2 BeanDefinition 的载入:把用户定义好的 Javabean 示意为 Ioc 容器外部的数据结构,这个容器外部的数据结构就是 BeanDefinition。
    3 接着向 Ioc 容器去注册这些 BeanDefinition。

5 SpringBoot 我的项目的启动流程?
springBoot 启动的时候,基于启动类上注解形容,进行主动配置并扫描指定包和加载包以及包中的类进行加载,而后检测类上是否有指定的注解形容,如 @service,@Controller,如果有,将类交给 spring 框架中的 Bean 工厂接口的实现类的对象,该对象会基于对象反射创立 bean 的实例,如果设定的生命周期办法,就调用该办法。一样的,有作用域形容,将实例贮存到不同的作用域中。

6 springMVC 拦截器的运行原理?
948 接口里原本就有个办法,只须要重写指定的办法
次要的拦挡次要是 url 的申请地址
业务层的拦挡用 AOP 来做

7AOP 的次要性能?
日志记录,性能统计,安全控制,事务管制,异样解决

8 形容一下最近做的我的项目和你负责的模块,只须要形容?

9cookie 和 session 的区别
1cookie 是将会话中的数据保留在客户端,属于客户端技术。
2 因为 cookie 将数据保留在客户端,对服务器没有影响,用户的操作就会导致数据的失落,不稳固,也不平安。
3cookie 保留在客户端,能够保留很久。
所以,对安全性不高,数据又要保留久用 cookie
4cookie 的大小和个数都有限度。大小不超过 1kb,站点给浏览器发送的个数了不超过 20 个。
5cookie 利用:实现购物车,记住用户名,30 天内主动登入。
session 是服务端技术,数据在服务端。绝对平安
session 是服务端的对象,在并发性高的时,每一个浏览器客户端在服务端都要对应一个 session 对象,占用内存,影响效率。
所有 session 适宜不必保留很久,安全性要求高的数据。比方保留登入状态,保留验证码。

10 什么是 SQL 注入攻打?如何避免
不必输出明码只输出用户名也能够登入就是 SQL 注入攻打,因为后盾的 SQL 语句是拼接而来的。用户提交参数中夹杂了 #,– 等,导致 SQL 语句的变动。
办法:1 通过正则表达式对用户提交的数据进行校验,如果参数中有符号就完结程序,告诉用户输出参数不非法,

   2 应用 PreparedStatement 对象避免 SQL 注入攻打。应用 preparedStatement 对象先将 SQL 语句发送给服务器编译,确定下来,编译之后,SQL 语句的骨架和寓意就不会变了,再讲 SQL 语句发送给服务器,这时候即便有 SQL 关键字或者是特殊符号,也只是被当做一般文原本解决。

11 JVM 如何进行内存调优?
个别企业用三方工具检索程序中,某个办法,某个城西,以及某个接口或者线程占用资源过多,进行调优。
硬件调优:更改 JVM 的参数设置
软件调优:
12 数据库的优化?
sql 语句的优化:尽量不应用全表扫描,不应用 where 子查问,不要应用含糊查问

13Spring 框架中的 IOC 实现原理?
通过把创立和查找依赖的权力交给容器治理,升高耦合,跟以前被动创立依赖不一样。

14AOP 的实现原理?
AOP 针对的是非核心业务,基于开闭准则。目标是:不该变原有零碎的外围业务代码的根底上增加一些扩大性能,如日志解决,事务管制,权限解决等。
分为两大类:一类是动静代理技术,利用截取消息面的形式,对音讯进行装璜,取代原有对象的执行。
AOP 基于代理机制实现性能扩大
JDK 动静代理:其代理对象必须是某个接口的实现,它是通过在运行期间创立一个接口的实现类来实现对指标对象的代理
CGLib 采纳了十分底层的字节码技术,其原理是通过字节码技术为一个类创立子类,并在子类中采纳办法拦挡的技术拦挡所有父类办法的调用,趁势织入横切逻辑。

15 Spring 实现 AOP 的形式?
1 基于 xml 配置 在 xml 中先改成 cglibi 代理,定义切面,切入点 controller 下所有类被调用前都会被拦挡。

2 基于注解的实现 @Aspect @Before

3 基于自定义的注解实现
16streambuffer 和 streambuilder 的区别是什么?

17 类办法和实例办法有什么区别?
类办法属于类,不属于某个对象。
类办法只能拜访成员变量,不能拜访实例变量,实例办法两个都能够
实例办法只能通过对象拜访,类办法能够通过类名,类办法,对象类办法调用。
类办法只能拜访类办法,实例办法能够拜访类办法和实例办法。
类办法不能被笼罩,实例办法能够被笼罩。

18 hashmap 和 hashtable 的区别
HashMap 是线程不平安的.,Hashtable 是线程平安的。
hashMap 是对 Map 接口的实现,hashtable 实现 Map 接口与 dictionary 抽象类。
hashMap 初始容量为 16,hashtable 是 11.
HashMap 能够存储 null 键和 null 值
Hashtable 不能够存储 null 键和 null 值.
两者的默认填充因子都是 0.75,hashmap 扩容时会翻倍。

19 线程和过程的区别
过程是资源分配的最小单位,线程是时程序运行的最小单位。
产生一个线程的时候,零碎会为线程调配独立的内存地址空间,而线程之间是共享地址空间。因而,一个线程消耗的资源比拟多,线程共享空间,所以线程的效率高,一个过程的破坏,不会影响其余过程,一个线程的破坏,会导致整个过程破坏了

20. 介绍一下枚举类型

21jdk1.8 新个性

22 二叉树遍历形式
办法一:先序遍历:
遍历程序:根节点–> 左孩子–> 右孩子
中序遍历:
后序遍历:
档次遍历:依照所在档次,从下往上遍历

23Tcp 和 Uip 区别

24 三次握手和四次挥手
三次握手:A 对 B,发动申请连贯;(第一次握手,发送 SYN,而后进入 SYN-SEND 状态)
第二次握手:B 收到了 A 的信息,对立建设连贯,发送 ACK-SYN 包
第三次握手:A 收到 B 信息,确认与 B 建设连贯。单方进入连贯状态。
四次挥手:
A 与 B 交换后,对 B 发送我要敞开连贯了。
B 收到 A 信息,确定 A 要敞开连贯
A 收到了 B 的确认信息后, 等了一段时间,因为 B 可能还有话要对他说。(此时 A 进入 FIN-WAIT-2)
4.B 说完了他要说的话(只是可能还有话说)之后,对 A 说,我要敞开连贯了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手)
5.A 收到 B 要完结连贯的音讯后说:已收到你要敞开连贯的音讯。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,而后 A 进入 CLOSED)
6.B 收到 A 的确认后,也进入 CLOSED。
25 spring 中的两大重点是什么

26 什么是 IOC?
管制反转也叫依赖注入。利用了工厂模式 将对象交给容器治理,你只须要在 spring 配置文件总配置相应的 bean,以及设置相干的属性,让 spring 容器来生成类的实例对象以及治理对象。在 spring 容器启动的时候,spring 会把你在配置文件 中配置的 bean 都初始化好,而后在你须要调用的时候,就把它曾经初始化好的那些 bean 调配给你须要 调用这些 bean 的类(假如这个类名是 A),调配的办法就是调用 A 的 setter 办法来注入,而不须要你在 A 外面 new 这些 bean 了。
27 Spring 基于 xml 注入 bean 的集中形式?
Set 办法注入
结构器注入:通过 index 设置参数的地位,通过 type 设置参数类型
动态过程的注入 4 实例工厂的注入

28 Spring 反对集中 bean 的作用域?
单例:每个容器中只有一个 bean 的实例
多例:为每一个 bean 提供一个实例
request: 为每一个网络申请创立一个实例,在申请实现当前,bean 会生效并被垃圾回收器回 收。
session: 与 request 范畴相似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean 会随之生效。
global-session: 全局作用域

29SpringMVC 怎么样设定重定向?
转发:加 forward
重定向:在返回值加 redirct

30SpringMVC 运行流程?
用户发动申请带前端控制器
前端控制器依据 xml 注解进行主动配置,注解查找 Handler。
处理器向前端控制器返回 handler
前端控制器调用处理器执行 Handler
处理器执行 Handler,执行完结,给适配器一个返回
适配器向前端控制器返回一个 modelandView
前端控制器申请视图解析器进行视图解析
视图解析器进行视图解析,实现后,给前端管制返回一个 view 对象
前端控制器进行视图渲染,填充到 request 域中,完结后向用户响应后果。

31 mybatis 如何进行批量插入
1 mybatis foreach 标签:
<insert id=”insertBatch” parameterType=”List”>
INSERT INTO TStudent(name,age) list 是参数类型
<foreach collection=”list” item=” 元素迭代的名字 ” index=”index” open=”(“ 从什么时候开始 ”)”separator=”union all”>
SELECT #{item.name} as a, #{item.age} as b FROM DUAL
</foreach>

32mybatis 中返回主键吗?

  1. 写 SQL,但不要本人插入主键值
  2. 配置 @Options(useGeneratedKeys=true, keyProperty="对象. 属性") 这个的作用是设置是否应用 JDBC 的getGenereatedKeys() 办法获取主键并赋值到 keyProperty 设置的对象的属性中,说白了就是把自增长的主键值赋值给对象相应的属性
  3. 在插入后,应用 对象. 主键属性的 getXXId()办法 获取主键值

33 什么起因导致内存溢出, 有没有好的解决措施
1 内存中加载的数据量过于宏大,如一次从数据库中取出太多数据。
尽量采纳分页形式查问
2 汇合类中有对对象的援用,应用后没有清空,是 JVM 不能回收

34String 和 StringBuffer 的区别
从运行速度方面来说 StringBuffer>String。String 为字符串常量,不可变。当你给 String 字符串从新赋值时看上去是扭转了这个字符串,但实际上在 jvm 中是从新创立了一个对象,而之前的被垃圾回收了。如果一个 StringBuffer 对象在字符串缓冲区被多个线程应用时,StringBuffer 中很多办法能够带有 synchronized 关键字,所以能够保障线程是平安的
String 实用与大量字符串操作,StringBuffer 实用于多线程下在字符串缓冲区进行大量操作

35StringBuffer 和 StringBuild 区别?

36Error、Exception 和 RuntimeException 的区别,作用又是什么?
Exception 是程序员导致的谬误,应该在应用程序级被解决
运行异样,空指针异样,数字格局异样,下标越界异样,类强转异样
Error 是不可被管制,常常用来示意零碎谬误,或者低层次资源谬误

37 事务的四大个性:
1 原子性:操作是不可拆散的,要么胜利,要么失败
2 一致性:数据库状态保留统一。比方转账,转账前后,相加的合放弃不变。
3 隔离性:不同事务之间应该隔开。比方 B 在批改事务,那么 A 应该看到批改事务之前,或者之后,而不是中间状态。
4 持久性:事务提交胜利,所有数据都被长久化保留在数据库中。

38 事务并发读问题?
能够通过设置事务的隔离级别。
脏读:一个事务读取到另一个事务没有提交更新的数据

不可反复读:对同一记录的两次读取后果不一样,在这期间对事务进行了批改

幻读:对同一张表的两次查问后果不统一,因为在两次查问期间,有事务进行了插入或者删除操作。
事务的隔离级别:4 个。
1read uncommitted 读未提交的数据 安全性最差,以上都会产生
2read commit oracle 默认
读曾经提交数据 只能够避免脏读,性能较好
3repeatable read mysql 默认 可反复读
防脏读和不可反复读,不能避免幻读
4 串行化 最高,数据拜访串行,不会有并发问题

    1. 数据库中如何将反复的数据去重(具体的 sql 语句)
    1. 数据库中存储的数据类型有哪些
    2. 整数 int bigint 实数类型 float,double
      字符串类型,varchar,char,text 等

    42 varchar 和 char 区别

     1)Char 固定长度 ;
     2)Varchar 可变长度 ;
     Char 如果存入数据的理论长度比指定长度要小 会补空格至指定长度 如果存入的数据的理论长度大于指定长度 低版本会被截取 高版本会报错;
     4)Varchar 类型如果存入的数据的理论长度比指定的长度小 会缩短到理论长度 如果存入 数据的理论长度大于指定长度 低版本会被截取 高版本会报错;
     5)Char 会节约更多的存储空间 而 Varchar 不会 ;
     6)Char 效率会更高 Varchar 效率偏低 ;     
     7)Char 和 Varchar 在指定时必须要制订前面的数字 

    43 1. 如果数据库中有 N 张表, 怎么统计表格的数量(具体的 sql 语句)

    44 1. Linux 中如何将服务器 A 近程连贯到服务器 B(具体命令语句)

    45 1. 说一说 spring 中 bean 对象的了解

    46 我的项目公布到服务器的流程.

    47 说一说依赖注入
    用于解耦 三种形式实现
    构造函数注入 set 注入 接口注入

    48 请介绍你最近做过的我的项目, 我的项目中遇到过什么样的问题, 你是怎么解决的?

    49 Redis 的运行原理是怎么样的, 简略形容一下

    50 你的我的项目外面哪里用了多线程?
    在日志记录模块应用了多线程,因为多条记录仪器涌向数据库

    51 GC 回收具体讲一下?

    52redis 缓存讲一下

    53String 操作类有哪些?有什么区别?
    String 和 StringBuffer、StringBuilder 的区别在于 String 申明的是不可变的对象,每次操作都会生成新的 String 对象,而后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 能够在原有对象的根底上进行操作,所以在常常扭转字符串内容的状况下最好不要应用 String。
    StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程平安的,而 StringBuilder 是非线程平安的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下举荐应用 StringBuilder,多线程环境下举荐应用 StringBuffer。

    54 Linux 如何批改文件权限?

    55 具体说说你我的项目次要有哪些性能?

    56 你在我的项目中遇到的印象粗浅的问题?

    57 你理解几种 IO?

    58Hashmap 和 HashTable 的区别?
    Hashmap 是线程平安的,table 是不平安
    hashmap 初始值是 16,table 是 11.HashMap 是能够贮存 null 值和 null 键的,hashtable 不能够。两者默认填充因子是 0.75,hashMap 扩容会翻倍。

    59Redis 的根本数据类型
    list set zset String

    60 如何在命令窗口打包

    61 Linux 一些根本命令

    62 表格是怎么设计?

    正文完
     0