面经总结附答案

一、Java基础

1.怎么理解Java对象?
常说的new一个对象,对象可以认为是在某一类事物中抽象出来某一个特例。通过new操作符来创建对象。

2.如何理解面向对象三大特性:封装、继承、多态?
封装:就是把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,
如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
继承: 使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
子类拥有父类非private的属性和方法
子类可以拥有自己属性和方法,即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法,
多态:它是指在父类中定义的属性和方法被子类继承够,可以具有不同的数据类型或表现出不同的行为。
Java实现多态有三种必要条件:继承、重写和向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样引用才既能调用父类的方法,又能调用子类的方法 向上转型讲述

3.子类继承了父类,一定不能直接访问父类的私有属性或者方法吗?

  • 无法直接访问
  • 可通过内部定义类,在父类中定义一个方法进行return 那个属性
  • 通过反射机制 getClass()获取对象->class.getDeclaredFields()获取Field[]->for(Field field:fields)遍历->将field.setAccessible置位true->filed.get(类)显示

附:
Super关键字
super可以用来引用直接父类的实例变量。
super可以用来调用直接父类方法。
super()可以用于调用直接父类构造函数

4.重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译。

public class Overloading {
    
    
    public int test(){
    
    
        System.out.println("test1");
        return 1;
    }
    public void test(int a){
    
    
        System.out.println("test2");
    }   
    //以下两个参数类型顺序不同
    public String test(int a,String s){
    
    
        System.out.println("test3");
        return "returntest3";
    }   
    public String test(String s,int a){
    
    
        System.out.println("test4");
        return "returntest4";
    }   
    public static void main(String[] args){
    
    
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}
 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,

在这里插入图片描述

二、MYSQL

5.MYSQL语句官方

基础:

  • 查 select * from 表名
  • 增 insert into 表名(列1,…) values (值1,…)
  • 改 update 表名 set 列1=值1,列2=值2… where 条件范围
  • 删 delete from 表名 where 条件 ——删除某行
  • 去重复值 select distinct 列名 from 表名 ——从那列中选取唯一不同的值展示
  • 运算符 select… where 条件 FirstName=‘Thomas’ AND或OR LastName=‘Carter’
  • 排序oder by 字段名

进阶:

  • 规定要返回的记录的数目top——select TOP number|percent 列名* from table_name
    • select top 2 * from 表名 选取头两条记录
    • select top 50 percent * from 表名
  • 在where子句中搜索列中的指定模式like—Select * from 表名 where City like ‘N%’ 以N开头的,’%N’以N结尾, ‘%N%’ 包含N
  • 通配符% _ [charlist] 搭建like使用
    • where FirstName LIKE ‘_eorge’ 希望表中选取名字的第一个字符之后是 “eorge” 的人:
    • WHERE LastName LIKE ‘C_r_er’,希望选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是任意字符,然后是 “er”:
  • 字符列中的任何单一字符 [charlist]
    • where City LIKE ‘[ALN]%’ 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人
  • IN 操作符允许我们在 WHERE 子句中规定多个值 select 列名 from 表名 where 列名 in (value1,value2…) 因为有一个列很多字段
  • Between … And 在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
    • WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’ 以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人 这里不同的数据库有不同的显示,用NOT BETWEEN ‘Adams’ AND
      ‘Carter’ 反验证
  • 可以为列名称和表名称指定别名As
  • 用于根据两个或多个表中的列之间的关系,从这些表中查询数据Join=inner join 例子
    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • Union 操作符用于合并两个或多个 SELECT 语句的结果集。注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
    • SELECT 列名 FROM 表名 UNION SELECT 列名 FROM 表名
    • 与 UNION ALL不同的是,All会把重复的 也显示出来
  • 用于创建表的备份复件 select into
    • SELECT *(字段) INTO 表 FROM 表
    • SELECT *INTO 表 IN '另一个库.mdb’FROM 表
  • 创建数据库create database database_name
  • 创建数据库中的表CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,…)
  • 约束用于限制加入表的数据的类型
    • 列名称 数据类型 NOT NULL 不能为空
    • UNIQUE 和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证
    • FOREIGN KEY 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
    • CHECK 约束用于限制列中的值的范围 CHECK (Id_P>0)
    • DEFAULT 约束用于向列中插入默认值 City varchar(255) DEFAULT ‘Sandnes’
  • create index 索引名 on 表名(列名)
    • CREATE INDEX PersonIndex ON Person (LastName DESC) 以降序索引某个列中的值
    • CREATE INDEX PersonIndex ON Person (LastName, FirstName) 索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开
  • 可以轻松地删除索引、表和数据库 drop
    • ALTER TABLE table_name DROP INDEX index_name
  • 用于在已有的表中添加、修改或删除列 ALTER
  • 会在新记录插入表中时生成一个唯一的数字 Auto-increment
    • P_Id int NOT NULL AUTO_INCREMENT,
  • 创建、更新和删除视图
    • CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued=No
  • Date函数
    • now() 当前的日期
    • Curdate()当前的时间
    • date() 提取日期或日期/时间表达式的日期部分
    • extract() 返回日期/时间按的单独部分
    • date_add() 给日期添加指定的时间间隔
    • date_sub() 从日期减去指定的时间间隔
    • dateDIFF()返回两个日期之间的天数
    • date——format()用不同的格式显示日期/时间
  • NULL操作符-默认地,表的列可以存放 NULL 值
    • SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL
  • 数据类型:文本、数字和日期/时间类型
  • Text类型
    • char 保存固定长度的字符串,最多255个字符
    • varchar 保存可变长度的字符串
    • TINYTEXT 存放最大长度为 255 个字符的字符串。
    • TEXT 存放最大长度为 65,535 个字符的字符串。
  • Number 类型
    • Int和TINYINT
    • FLOAT
    • DOUBLE
    • DECIMAL 小数
  • Date类型
    • DATE() -YYYY-MM-DD
    • DATETIME() -YYYY-MM-DD HH:MM:SS
    • TIMESTAMP() -YYYY-MM-DD HH:MM:SS
    • TIME() -HH:MM:SS
    • YEAR()

SQL函数

  • AVG(*) 返回平均值
  • select avg(列名) from 表名
  • count(*) 函数返回匹配指定条件的行数。
  • select count(distinct 列名) from 表名—— 去掉列的重复值
  • select count(列名) from 表名 where 列名=’ 特定值’
  • first() 函数返回指定的字段中第一个记录的值
  • SELECT FIRST(列名) FROM table_name
  • LAST() 函数返回指定的字段中最后一个记录的值。
  • MAX() 函数 函数返回一列中的最大值,NULL 值不包括在计算中
  • MIN 函数返回一列中的最小值。NULL 值不包括在计算中
  • SUM 函数返回数值列的总数(总额)
  • GROUP BY 用于结合合计函数,根据一个或多个列对结果集进行分组
    • SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY 列名/字段名
    • 先分组后排序
  • HAVING 增加 HAVING 子句原因是:WHERE 关键字无法与合计函数一起使用
    • SELECT 字段,SUM(字段) FROM 表 GROUP BY 字段
      HAVING SUM(字段)<2000
  • UCASE 函数把字段的值转换为大写
  • SELECT UCASE(LastName) as LastName,FirstName FROM Persons
  • LCASE 函数把字段的值转换为小写
  • MID 函数用于从文本字段中提取字符
    • SELECT MID(列名,start,length) FROM table_name
  • LEN(列名)函数返回文本字段中值的长度
  • ROUND 函数用于把数值字段舍入为指定的小数位数
  • SELECT ROUND(column_name,decimals) FROM table_name 要舍入的字段和规定要返回的小数位数。
  • NOW 函数返回当前的日期和时间。
    • SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
  • FORMAT 函数用于对字段的显示进行格式化。
    • SELECT FORMAT(column_name,format) FROM table_name
    • SELECT ProductName, UnitPrice, FORMAT(Now(),‘YYYY-MM-DD’) as PerDate
      FROM Products

三、计算机网络

1.Tcp/Ip的四层协议

  • 应用层(各种病应用层协议如支持万维网HTTP 域名系统DNS等)
    • 应用进程间通信和交互来完成特定网络任务,交互的数据单元为报文
  • 运输层(TCP或UDP)
    • 负责向两台主机中进程之间的 通信提供通用的数据传输服务。
    • 传输控制协议TCP:面向连接的、可靠的数据传输服务,传输单位报文段
    • 用户数据报协议UDP:提供无连接的、不保证数据可靠的传输服务。单位:用户数据包
  • 网络层(IP ICMP ARP)
    • 为分组交换网上的不同主机提供通信服务,把运输层产生的报文段或用户数据报封装成分组或包进行传送
  • 数据链路层
    -IP数组组装成帧,每一帧包含(同步信息、地址信息、差错控制),从中获取数据部分上交给网络层

2.TCP与IP的区别

  • Tcp:传输控制协议,一种面向连接的,端对端的,可靠的,基于ip的传输层协议、主要特点是三次握手,四次挥手。
  • IP:又叫因特网协议,ip协议位于网络层,ip协议规定了数据传输时的基本单元(数据包)和格式,ip协议还定义了数据包的递交办法和路由选择。

总结: 整个网络中的传输流程是:IP层接收由更底层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层TCP层,IP层也把从TCP接收来的数据包传送到更底层。

TCP和IP的关系是:IP提供基本的数据传送,而高层的TCP对这些数据包做进一步加工,如提供端口号等等。
在这里插入图片描述
图解TCP/IP通信传输流过程及原理
通信传输过程(以HTTP为例)
1.首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求
2.为了传输方便,在传输层(TCP协议)把从应用层处接收到数据(HTTP请求报文)进行分割,并在各个报文上打上标志序号及端口号后转发给网络层。
3.在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
4.接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。

3.HTTP协议与TCP/IP协议的关系

  • HTTP的长连接和短连接本质上是TCP长连接和短连接。
  • HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
  • IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。

4.什么是长连接、短连接?
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

猜你喜欢

转载自blog.csdn.net/weixin_42754971/article/details/114380484