一些面试中遇到的问题

针对实际面试所遇到问题的查漏补缺,引荐了一些csdn大佬的回答并结合自己的观点做出的一系列总结。

1. TCP和UDP协议的相似之处。

TCP和UDP的基本概念

  1. TCP(Transmission Control Protocol),传输控制协议。
  2. UDP(User Data Protocol),用户数据报协议。

二者的异同点

1. TCP和UDP的相同点:

TCP和UDP都是在网络层,都是传输层协议,都能都是保护网络层的传输,双方的通信都需要开放端口。

2. TCP和UDP的不同的:

TCP UDP
1 TCP的传输是可靠传输。 UDP的传输是不可靠传输。
2 TCP是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。 UDP是和TCP相对应的协议,它是面向非连接的协议,它不与对方建立连接,而是直接把数据包发送出去
3 TCP是一种可靠的通信服务,负载相对而言比较大,TCP采用套接字(socket)或者端口(port)来建立通信。 UDP是一种不可靠的网络服务,负载比较小。
4 TCP和UDP结构不同,TCP包括序号、确认信号、数据偏移、控制标志(通常说的URG、ACK、PSH、RST、SYN、FIN)、窗口、校验和、紧急指针、选项等信息。 UDP包含长度和校验和信息。
5 TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
6 TCP在发送数据包前在通信双方有一个三次握手机制,确保双方准备好,在传输数据包期间,TCP会根据链路中数据流量的大小来调节传送的速率,传输时如果发现有丢包,会有严格的重传机制,故而传输速度很慢。 UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
7 TCP支持全双工和并发的TCP连接,提供确认、重传与拥塞控制。 UDP适用于哪些系统对性能的要求高于数据完整性的要求,需要“简短快捷”的数据交换、需要多播和广播的应用环境。

2.在浏览器中输入网址后回车发生了哪些事情

该问题来自2021/1/14上午我笔试腾梭上海腾梭科技有限公司遇到的笔试题。

第一次遇到,有些懵逼,内心想:输入的这个网址网址如果是正确的就跳转过去,错误的话就找不到呗,还能有什么,回答的完全没有头绪。后面查阅了一下,发现这里有大学问:

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束

1.DNS解析

DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当我们在浏览器中输入一个地址时,例如www.baidu.com,其实不是百度网站真正意义上的地址。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的百度的网址。所以互联网设计者需要在用户的方便性与可用性方面做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析。它实际上充当了一个翻译的角色,实现了网址到IP地址的转换。网址到IP地址转换的过程是如何进行的?

解析过程

DNS解析是一个递归查询的过程。

上述图片是查找www.google.com的IP地址过程。首先在本地域名服务器中查询IP地址,如果没有找到的情况下,本地域名服务器会向根域名服务器发送一个请求,如果根域名服务器也不存在该域名时,本地域名会向com顶级域名服务器发送一个请求,依次类推下去。直到最后本地域名服务器得到google的IP地址并把它缓存到本地,供下次查询使用。从上述过程中,可以看出网址的解析是一个从右向左的过程: com -> google.com -> www.google.com。但是你是否发现少了点什么,根域名服务器的解析过程呢?事实上,真正的网址是www.google.com.,并不是我多打了一个.,这个.对应的就是根域名服务器,默认情况下所有的网址的最后一位都是.,既然是默认情况下,为了方便用户,通常都会省略,浏览器在请求DNS的时候会自动加上,所有网址真正的解析过程为: . -> .com -> google.com. -> www.google.com.。

2.进行TCP连接

建立TCP链接,就是通常说的三次握手,首先是客户端向服务器发送请求是否可以建立链接,服务器返回同意后,客户端回馈服务器的响应,即完成3次通话。TCP中的三次握手,大家可以自行百度,这里就不多说了。

3.发送HTTP请求

在完成TCP连接后,接下来做的事情就是客户端向服务器端发送http请求,http请求内容包括:

  • 请求行:方法+地址+http版本
  • 请求头
  • 请求体

请求行

请求行的格式为:

Method Request-URL HTTP-Version CRLF

举个例子:GET www.baidu.com HTTP/1.1

当然请求的方法分为GET POST PUT DELETE OPTION HEAD这些类型

请求头

请求头是指在客户端向服务器传递请求的附加信息和客户端自身的信息。PS: 客户端不一定特指浏览器,有时候也可使用Linux下的CURL命令以及HTTP客户端测试工具等。例如postman、火狐的Restclient。常见的请求报头有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。常见有Accept Accept-Charset Conent-Type Authorization

请求体

当使用POST, PUT等方法时,通常需要客户端向服务器传递一些参数数据。这些数据就储存在请求体中。在请求包头中有一些与请求体相关的信息,例如: 现在的Web应用通常采用Rest架构,请求的数据格式一般为json。这时就需要设置Content-Type: application/json。

给一个HTTP请求的例子:

GET请求

POST请求

4.服务器处理请求并返回HTTP报文

服务器端接到http请求后在会作出响应,响应内容包括:

  • 响应行:http版本+状态码+状态描述
  • 响应头
  • 响应体

状态码

状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:

  • 1xx:指示信息–表示请求已接收,继续处理。
  • 2xx:成功–表示请求已被成功接收、理解、接受。
  • 3xx:重定向–要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误–请求有语法错误或请求无法实现。
  • 5xx:服务器端错误–服务器未能实现合法的请求。
    平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500

响应头

与请求头部类似,为响应报文添加了一些附加信息,常见的响应头有Server Content-Type Content-Length Content-Charset等

响应体

服务器返回给浏览器的文本信息,通常后端返回的数据以及HTML, CSS, JS, 图片等文件就放在这一部分。

给一个HTTP响应报文的例子

5.浏览器解析渲染页面

浏览器在收到HTML,CSS,JS文件后,它将这些信息渲染到客户端页面上。下图对应的就是渲染的基本过程

浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain。

6.连接结束关闭TCP链接

3. 正则表达式常用用法

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[\t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

\p{Lower} 小写字母字符:[a-z]

\p{Upper} 大写字母字符:[A-Z]

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

(X) X,作为捕获组

非捕获

(?=X) X,通过零宽度的正lookahead

(?!X) X,通过零宽度的负lookahead

(?<=X) X,通过零宽度的正lookbehind

(?<!X) X,通过零宽度的负lookbehind

(?>X) X,作为独立的非捕获组

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class test {public static void main(String[] args) {//表达式对象 写入匹配规则Pattern p = Pattern.compile("[^ads14654^&(*]");//创建Matcher对象Matcher m = p.matcher("ads14654^&(*");if (m.find()){System.out.println("结果匹配");}else {System.out.println("结果不匹配");}}
}

4.一些常见但我不知道的专业术语

  1. 抽象类和最终类(这个最终类就是被final修饰的类,第一次见一脸懵逼)

  2. 并行与并发

    什么是并发?

    并发:指应用能够交替执行不同的任务,其实并发有点类似于多线程的原理,多线程并非是同时执行多个任务,如果你开两个线程执行,就是在你几乎不可能察觉到的速度不断去切换这两个任务,以达到"同时执行效果",其实并不是的,只是计算机的速度太快,我们无法察觉到而已.

    就类似于你,吃一口饭喝一口水,以正常速度来看,完全能够看的出来,当你把这个过程以n倍速度执行时…可以想象一下, 吃->喝…如此反复.

    什么是并行?
    并行:指应用能够同时执行不同的任务,例:吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行

    两者区别:一个是交替执行,一个是同时执行.

5.mysql between and 包含边界吗

mysql的sql语句中可以使用between来限定一个数据的范围,例如:

select * from user where userId between 5 and 7;
查询userId为5、6,7的user,userId范围是包含边界值的,也等同如下查询: select * from user where userId >= 5 and userId <= 7;
很多地方都提到between是给定的范围是大于等第一值,小于第二个值,其实这是不对的。此前我一直也是这么认为,通过实验,结论是包含两边的边界值,如果实在拿不准,可以采用>= 、<=的方式来指定条件。

另外 not between的范围是不包含边界值。

6.字符判断(Character类)

Character类:

在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。 以确定字符的类别(小写字母,数字,等等)

构造方法:

public Character(char value)

构造一个新分配的 Character 对象,用以表示指定的 char 值

Character类的判断功能:

  • public static boolean isDigit(char ch) 确定指定字符是否为数字。
  • public static boolean isLetter(char ch) 确定指定字符是否为字母。
  • public static boolean isLowerCase(char ch) 确定是否是小写字母字符
  • public static boolean isUpperCase(char ch) 确定是否大写字母字符

7.Java中 ? extends T 和 ? super T 的理解

  • <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类;
  • <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object;

    上界<? extends T>不能往里存,只能往外取

    比如,我们现在定义:List<? extends T>首先你很容易误解它为继承于T的所有类的集合,你可能认为,你定义的这个List可以用来put任何T的子类,那么我们看下面的代码:

    import java.util.LinkedList;
    import java.util.List;public class test {public static void main(String[] args) {List<? extends Father> list = new LinkedList<>();list.add(new Son());}
    }
    class Human{}
    class Father extends Human{}
    class Son extends Father{}
    class LeiFeng extends Father {}123456789101112131415161718
    

    list.add(new Son());这行会报错:The method put(Son) is undefined for the type List<capture#1-of ? extends Father>

    List<? extends Father> 表示 “具有任何从Son继承类型的列表”,编译器无法确定List所持有的类型,所以无法安全的向其中添加对象。可以添加null,因为null 可以表示任何类型。所以List 的add 方法不能添加任何有意义的元素,但是可以接受现有的子类型List 赋值。

    你也许试图这样做:

    List<? extends Father> list = new LinkedList<Son>();
    list.add(new Son());
    12
    

    即使你指明了为Son类型,也不能用add方法添加一个Son对象。

    list中为什么不能加入Father类和Father类的子类呢,我们来分析下。

    List<? extends Father>表示上限是Father,下面这样的赋值都是合法的

       List<? extends Father> list1 = new ArrayList<Father>();List<? extends Father> list2 = new ArrayList<Son>();List<? extends Father> list3 = new ArrayList<LeiFeng>();
    123
    

    如果List<? extends Father>支持add方法的话:

    • list1可以add Father和所有Father的子类;
    • list2可以add Son和所有Son的子类;
    • list3可以add LeiFeng和所有LeiFeng的子类。

    下面代码是编译不通过的:

    list1.add(new Father());//error
    list1.add(new Son());//error
    12
    

    原因是编译器只知道容器内是Father或者它的派生类,但具体是什么类型不知道。可能是Father?可能是Son?也可能是LeiFeng,XiaoMing?编译器在看到后面用Father赋值以后,集合里并没有限定参数类型是“Father“。而是标上一个占位符:CAP#1,来表示捕获一个Father或Father的子类,具体是什么类不知道,代号CAP#1。然后无论是想往里插入Son或者LeiFeng或者Father编译器都不知道能不能和这个CAP#1匹配,所以就都不允许。

    所以通配符<?>和类型参数的区别就在于,对编译器来说所有的T都代表同一种类型。比如下面这个泛型方法里,三个T都指代同一个类型,要么都是String,要么都是Integer。

    public <T> List<T> fill(T... t);
    1
    

    但通配符<?>没有这种约束,List<?>单纯的就表示:集合里放了一个东西,是什么我不知道。

    所以这里的错误就在这里,List<? extends Father>里什么都放不进去。

    List<? extends Father> list不能进行add,但是,这种形式还是很有用的,虽然不能使用add方法,但是可以在初始化的时候一个Season指定不同的类型。比如:

    List<? extends Father> list1 = getFatherList();//getFatherList方法会返回一个Father的子类的list
    1
    

    另外,由于我们已经保证了List中保存的是Father类或者他的某一个子类,所以,可以用get方法直接获得值:

    List<? extends Father> list1 = new ArrayList<>();
    Father father = list1.get(0);//读取出来的东西只能存放在Father或它的基类里。
    Object object = list1.get(0);//读取出来的东西只能存放在Father或它的基类里。
    Human human = list1.get(0);//读取出来的东西只能存放在Father或它的基类里。
    Son son = (Son)list1.get(0);
    12345
    

    下界<? super T>不影响往里存,但往外取只能放在Object对象里

    下界用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object。

    //super只能添加Father和Father的子类,不能添加Father的父类,读取出来的东西只能存放在Object类里
    List<? super Father> list = new ArrayList<>();
    list.add(new Father());
    list.add(new Human());//compile error
    list.add(new Son());
    Father person1 = list.get(0);//compile error
    Son son = list.get(0);//compile error
    Object object1 = list.get(0);
    12345678
    

    因为下界规定了元素的最小粒度的下限,实际上是放松了容器元素的类型控制。既然元素是Father的基类,那往里存粒度比Father小的都可以。出于对类型安全的考虑,我们可以加入Father对象或者其任何子类(如Son)对象,但由于编译器并不知道List的内容究竟是Father的哪个超类,因此不允许加入特定的任何超类(如Human)。而当我们读取的时候,编译器在不知道是什么类型的情况下只能返回Object对象,因为Object是任何Java类的最终祖先类。但这样的话,元素的类型信息就全部丢失了。

    PECS原则

    最后看一下什么是PECS(Producer Extends Consumer Super)原则,已经很好理解了:

    • 频繁往外读取内容的,适合用上界Extends。
    • 经常往里插入的,适合用下界Super。

    总结

    • extends 可用于返回类型限定,不能用于参数类型限定(换句话说:? extends xxx 只能用于方法返回类型限定,jdk能够确定此类的最小继承边界为xxx,只要是这个类的父类都能接收,但是传入参数无法确定具体类型,只能接受null的传入)。
    • super 可用于参数类型限定,不能用于返回类型限定(换句话说:? supper xxx 只能用于方法传参,因为jdk能够确定传入为xxx的子类,返回只能用Object类接收)。
    • ? 既不能用于方法参数传入,也不能用于方法返回。

    带有super超类型限定的通配符可以向泛型对象中写入,带有extends子类型限定的通配符可以向泛型对象读取。

8.谈谈对面向对象的理解?

首先java编程的宣传语就是面向对象编程,他其实也就是现实生活中的映射。在现实生活中,任何的物体都可以归为一类事务,而每一个个体就是这一类事务实例。我们所有的操作都是基于这一个个实例来进行的。

面向对象的三大特征:封装、继承、多态

封装就是将一类事务的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高代码隐蔽性的同时,使代码模块化,提高了复用性。

继承则是将一类事物的共有属性和行为抽象成一个类,每一个子类在保留父类属性行为的基础上,也有自己独特的属性和行为。提高了代码的拓展性。

多态则是对事务行为(接口)实现了复用,就好比针对于跑步,我们可以快跑,也可以慢跑,也可以两者结合。给统一行为提供了不同的实现方式,这就是面向对象编程醉精髓的部分。

9.聊一聊常见的IO流

在java中,将不同的输入输出源通过流的形式进行相关操作(输入,输出),流是一种抽象描述,在程序中表示数据的一种转移方式

Jdk提供了各种不同的流用于处理不同的输入输出源,根据流性质划分分为以下类型:

  • 按流向分(站在程序角度考虑

    • 输入流(input)
    • 输出流(output)
  • 按类型分:
    • 字节流(InputStream/OutputStream)

      • 任何文件都可以通过字节流进行传输。
    • 字符流(Reader/Writer)
      • 非纯文本文件,不能用字符流,会导致文件格式破坏,不能正常执行。
    • 节点流(低级流:直接跟输入输出源对接)

      • FileInputStream/FileOutputStream/FileReader/FileWriter/PrintStream/PrintWriter.
    • 处理流(高级流:建立在低级流的基础上)
      • 转换流:InputStreamReader/OutputStreamWriter,字节流转字符流/字符流转字节流
      • 缓冲流:BufferedInputStream/BufferedOutputStream BufferedReader/BufferedReader可对节点流经行包装,使读写更快

10.关于MySQL关键字的一些问题

关键词顺序:

select → from → where → group by → having → order by

**1.from:**需要从哪个数据表检索数据
**2.where:**过滤表中数据的条件
**3.group by:**如何将上面过滤出的数据分组
**4.having:**对上面已经分组的数据进行过滤的条件
**5.select:**查看结果集中的哪个列,或列的计算结果
**6.order by

【面试总结】面试前不得不刷一下的硬核总结。相关推荐

  1. python 实数如何取整_从面试官角度提问:15道硬核Python面试题,论面霸是如何炼成的...

    见过面试题也不少了,总之了一句话:面试前备好功课,面试中临危不乱,面试后谦虚有礼!这只是我本人总结的一些面试三要素,需要的可以参考参考,话不多了,今天为大家找了比较硬核的15道面试题,希望能够对各位有 ...

  2. ♥看二本学渣如何进腾讯 分享面试经验、职场感悟、硬核知识、大厂内推♥

    ☆☆☆牛牛´s简介☆☆☆ 牛牛,普通二本学渣,实习进完美,毕业进腾讯,去过外企,肝过头条. 目前又继续回腾讯窝着.       ☆☆☆牛牛´s公众号☆☆☆ 日常硬核输出数据库.数据结构.操作系统.分布 ...

  3. 程序员不得不了解的硬核知识大全!

    我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了.在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远 ...

  4. 超硬核!兔兔阿里p7学长给的面试知识库

    一个阿里p7学长给的nosql面试知识库,绝对真实,学会了去面呀. 最近整理了一下超硬核系列的文章和面经系列的文章,可以持续关注下: 超硬核系列历史文章:(我保证每篇文章都有值得学习的地方,并且对小白 ...

  5. 硬核干货合集!500+篇Java干货技术文章整理|资源|书单|工具|面试指南|强烈建议打开!

    今天给大家推荐一位在阿里做Java的朋友给大家,他是公众号[程序员书单]的作者黄小斜. 他的公众号[程序员书单]这两年来累积了200多篇优质原创文章,独家原创的系列文章有<五分钟学编程>系 ...

  6. 抖音、腾讯、阿里、美团春招服务端开发岗位硬核面试(二)

    在上一篇 文章中,我们分享了几大互联网公司面试的题目,本文就来详细分析面试题答案以及复习参考和整理的面试资料,小民同学的私藏珍品????. 首先是面试题答案公布,在讲解时我们主要分成如下几块:语言的基 ...

  7. 超硬核!苏州同程旅游学长给我的全面的面试知识库

    超硬核!苏州同程旅游学长给我的全面的面试知识库 1.简介 新生和经验丰富的C#面试常见问题解答 2.什么是C#? 3.用示例说明C#中的注释类型 4.可以执行多个catch块吗? 5. public, ...

  8. 硅谷硬核Rasa课程、Rasa培训、Rasa面试系列之: Rasa 3.x rasa test等运行命令学习

    硅谷硬核Rasa课程.Rasa培训.Rasa面试系列之: Rasa 3.x rasa test等运行命令学习 rasa test 要根据测试数据评估模型,请运行: 这将在您在带有test_前缀的文件中 ...

  9. 想不到Github有如此硬核的Java高级面试“备战”仓库,太腻害了

    有人调侃我们说: 程序员不如送外卖.送外卖是搬运食物,自己是搬运代码,都不产出新的东西-- 透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险-- 想跳槽,但是更高的平台难进,同级别的 ...

最新文章

  1. SWAGAN:基于样式的小波驱动生成模型
  2. 网络视频监控系统解决方案概述
  3. 让代码自动补全的全套流程
  4. java 初级编程题_java基础经典编程题
  5. python 列表转图结构_Python读取网络(图)边列表数据进而转化为邻接矩阵
  6. Flutter设置允许HTTP访问
  7. SQL注入漏洞(原理;网页注入)
  8. case when then end.sql
  9. Controller中servletFileUpload.parseRequest(request)解析为空
  10. linux 服务器 硬盘测试工具,linux硬盘检测工具:Smartmontools使用指南
  11. 如何实现Iframe透明
  12. Vue项目设置全屏背景图片上方有白边的问题
  13. 如何在vue页面中引入其他的子组件?(局部引入/全局引入)
  14. 微信小程序支付功能后台PHP实现
  15. 140.210.28.29扬州BGP高防服务器
  16. 高新技术产业的股权设计原则
  17. Jmeter组件-线程组(Thread Group)
  18. mysql curd_mysql 基础之CURD
  19. “2021年度ICT产业龙虎榜”揭晓,九州云喜提“双黄蛋”
  20. 段码液晶屏点亮思路--以华大单片机为例

热门文章

  1. 俄大神 lopatkin Windows 精简优化系统 - 工具软件
  2. 计算机软件卸载不了怎么办,软件卸载不了,教您软件卸载不了怎么办
  3. 一个QQ空间的钓鱼盗号过程揭露,大家谨防上当
  4. 如何看待阿里云推出的免费虚拟主机?
  5. oracle表删除提示对象不存在,查询表结构报“ORA-04043: 对象XXX不存在”解决-Oracle...
  6. Linux下嵌入式开发环境配置
  7. 报告:非洲加密货币诈骗活动比例低于世界其他地区
  8. 手写JDBC的几个步骤(针对MySQL8.0以上的mysql数据库)
  9. mysql与mysqld
  10. python 中arange函数_python基础之np.arange函数