ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试问题复盘

2021-03-12 19:35:13  阅读:124  来源: 互联网

标签:arr right start int 问题 面试 线程 复盘 left


JDBC

https://www.cnblogs.com/kevinf/p/3705148.html

JSP/Servlet/JavaBean 的 MVC 模式

https://blog.csdn.net/ITBigGod/article/details/86515893

SpringMVC 的应用

https://blog.csdn.net/cx521600/article/details/90241944

TCP/IP协议有几层模型?

TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层。

  • 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

  • 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等, TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

  • 网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 等)来传送数据。

进程和线程的区别

  • 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

  • 线程的划分尺度小于进程,使得多线程程序的并发性高.

  • 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率.

  • 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

  • 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别

进程状态

image-20210312192018357

Mysql和SQL Server的区别

  • mysql支持enum,和set类型,sql server不支持

  • mysql不支持nchar,nvarchar,ntext类型

  • mysql的递增语句是AUTO_INCREMENT,而sql server是identity(1,1)

  • sql server默认导出表创建语句的默认值表示是((0)),而在mysql里面是不允许带两括号的

  • mysql需要为表指定存储类型

  • sql server识别符是[],[type]表示他区别于关键字,但是mysql却是 `,也就是按键1左边的那个符号

  • sql server支持getdate()方法获取当前时间日期,但是mysql里面可以分日期类型和时间类型,获取当前日期是cur_date(),当前完整时间是 now()函数

常见的排序方式有几种?快速排序的原理

  • 时间复杂度O(n^2)

    • 冒泡排序

    • 选择排序

    • 插入排序

  • 时间复杂度O(nlogn)

    • 希尔排序

    • 堆排序

    • 归并排序

    • 快速排序

快排原理

原理:

  1. 从数组中取出一个数,称之为基数(pivot)

  2. 遍历数组,将比基数大的数字放到它的右边,比基数小的数字放到它的左边。遍历完成后,数组被分成了左右两个区域

  3. 将左右两个区域视为两个数组,重复前两个步骤,直到排序完成

代码参考:

public static void quickSort(int[] arr) {
   quickSort(arr, 0, arr.length - 1);
}
public static void quickSort(int[] arr, int start, int end) {
   // 如果区域内的数字少于 2 个,退出递归
   if (start >= end) return;
   // 将数组分区,并获得中间值的下标
   int middle = partition(arr, start, end);
   // 对左边区域快速排序
   quickSort(arr, start, middle - 1);
   // 对右边区域快速排序
   quickSort(arr, middle + 1, end);
}
// 将 arr 从 start 到 end 分区,左边区域比基数小,右边区域比基数大,然后返回中间值的下标
public static int partition(int[] arr, int start, int end) {
   // 取第一个数为基数
   int pivot = arr[start];
   // 从第二个数开始分区
   int left = start + 1;
   // 右边界
   int right = end;
   // left、right 相遇时退出循环
   while (left < right) {
       // 找到第一个大于基数的位置
       while (left < right && arr[left] <= pivot) left++;
       // 交换这两个数,使得左边分区都小于或等于基数,右边分区大于或等于基数
       if (left != right) {
           exchange(arr, left, right);
           right--;
      }
  }
   // 如果 left 和 right 相等,单独比较 arr[right] 和 pivot
   if (left == right && arr[right] > pivot) right--;
   // 将基数和中间数交换
   if (right != start) exchange(arr, start, right);
   // 返回中间值的下标
   return right;
}
private static void exchange(int[] arr, int i, int j) {
   int temp = arr[i];
   arr[i] = arr[j];
   arr[j] = temp;
}

注意:快排是个不稳定的排序方式



标签:arr,right,start,int,问题,面试,线程,复盘,left
来源: https://www.cnblogs.com/AntonyJ/p/14525963.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有