最近面试问题-1

1.Spring的核心是?

IOC(控制反射)和AOP(面向切面编程)。

从注入方法上看,IoC主要可以分为3种类型:①构造函数注入②属性注入③接口注入。Spring支持构造函数注入和属性注入

2.SpringMVC是什么?

*.创建一个web环境;*.在创建一个controller类,加入@Controller的注解

SpringMVC是Spring的一个子框架,也包括了一些Spring的特性,如:依赖注入

3.算法知道哪些?

冒泡排序:两个数相比较,哪一个数较大,就交换两个的位置。

function bubbleSort(arr) {
    var len = arr.length;
    for (var i = 0; i < len - 1; i++) {
        for (var j = 0; j < len - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {        // 相邻元素两两对比
                var temp = arr[j+1];        // 元素交换
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

快速排序:从数列中找一个数为“基准”,重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)

public class QuickSort implements IArraySort {

    @Override
    public int[] sort(int[] sourceArray) throws Exception {
        // 对 arr 进行拷贝,不改变参数内容
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

        return quickSort(arr, 0, arr.length - 1);
    }

    private int[] quickSort(int[] arr, int left, int right) {
        if (left < right) {
            int partitionIndex = partition(arr, left, right);
            quickSort(arr, left, partitionIndex - 1);
            quickSort(arr, partitionIndex + 1, right);
        }
        return arr;
    }

    private int partition(int[] arr, int left, int right) {
        // 设定基准值(pivot)
        int pivot = left;
        int index = pivot + 1;
        for (int i = index; i <= right; i++) {
            if (arr[i] < arr[pivot]) {
                swap(arr, i, index);
                index++;
            }
        }
        swap(arr, pivot, index - 1);
        return index - 1;
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

}

4.数据结构你知道哪些?

堆:先进后出,多用于递归功能方面的场景,如:斐波那契数列:1.先写递归结束条件;2.接着写等价关系式

队列:先进先出,多用于线程阻塞队列

链表:分为单链表、双链表、循环链表。它的每个元素都有两个结点,一个结点是存放数据的内存空间,一个结点是指向下一个结点的指针域。

对于链表,在增加删除是,只需要改变前后两个元素结点的指针域的地址就行了,但是链表中的指针太多,对于修改查找就会过于复杂、麻烦。

5.数据库的三大范式?

第一范式:列不可再分,确保它的原子性;

第二范式:在第一范式的基础上,完全依赖主键;

第三范式:在一、二范式的基础上,直接依赖于主键。

6.如何理解JVM?

JVM即Java虚拟机,其中它包含了Java解释器和类加载器,根据指定全限定名称将class文件加载到JVM内存,转为Class对象。

引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。

7.你知道哪些加密的方法?

  • MD5:
  • SHA1:是哈希算法的一种
  • RSA:非对称加密算法:公开密钥(publickey)和私有密钥(privatekey)
  • AES:对称密钥加密:加密代码实现:引入 #import <CommonCrypto/CommonCryptor.h>
  • DES:先将内容加密一下,然后转十六进制,传过去 ;DES解密 :把收到的数据转二进制,decode一下,然后再解密,得到原本的数据
            代码实现 :引入 #import <CommonCrypto/CommonCryptor.h>

8.如何理解外键?

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。

9.Nginx和Linux的命令?

Nginx:高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

nginx -s reopen #重启Nginx

nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx

nginx -s stop #强制停止Nginx服务

nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)

nginx -t #检测配置文件是否有语法错误,然后退出

nginx -?,-h #打开帮助信息

nginx -v #显示版本信息并退出

nginx -V #显示版本和配置选项信息,然后退出

nginx -t #检测配置文件是否有语法错误,然后退出

nginx -T #检测配置文件是否有语法错误,转储并退出

nginx -q #在检测配置文件期间屏蔽非错误信息

nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)

nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)

nginx -g directives #设置配置文件外的全局指令

killall nginx #杀死所有nginx进程

Linux:多用户、多任务、支持多线程和多CPU的操作系统。

磁盘:cd:跳转到想要跳转的磁盘;

系统:clear:清屏

           passwd:用来更改使用者的密码

           ip :是 Linux 加强版的的网络配置工具,用于代替 ifconfig 命令

10.事物的隔离级别?

       ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

  ③ Read committed (读已提交):可避免脏读的发生。

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

事务的并发问题

  1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A

                       改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

事务的基本要素(ACID)

  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

11.servlet、listener、filter的区别?怎么用?

servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。

filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。

创建一个Filter只需两个步骤:

    • 建Filter处理类;
    • web.xml文件中配置Filter。

listener:监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。

interceptor:是在面向切面编程的,就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,是基于JAVA的反射机制。

 

servlet、filter、listener是配置到web.xml中(web.xml 的加载顺序是:context-param -> listener -> filter -> servlet ),interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。 

  1、servlet:

        创建并返回一个包含基于客户请求性质的动态内容的完整的html页面;
        创建可嵌入到现有的html页面中的一部分html页面(html片段);
        读取客户端发来的隐藏数据;
        读取客户端发来的显示数据;
        与其他服务器资源(包括数据库和java的应用程序)进行通信;
        通过状态代码和响应头向客户端发送隐藏数据。

       2、filter:

        filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应:
        在执行servlet之前,首先执行filter程序,并为之做一些预处理工作;
        根据程序需要修改请求和响应;
        在servlet被调用之后截获servlet的执行

         3、listener:职责如概念。

          servlet2.4规范中提供了8个listener接口,可以将其分为三类,分别如下:
         第一类:与servletContext有关的listner接口。包括:ServletContextListener、ServletContextAttributeListener
         第二类:与HttpSession有关的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、                      HttpSessionActivationListener;
         第三类:与ServletRequest有关的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener

        4、interceptor:与过滤器十分相似,通过层层拦截,处理用户的请求和响应。

11.Redis是什么?

redis是一个高性能的key-value存储系统

redis提供五种数据类型:string,hash,list,set及zset(sorted set)。

posted @ 2021-10-11 22:18  亭子^_^  阅读(43)  评论(0)    收藏  举报