面试题30天打卡-day04

简介: 面试题30天打卡-day04

1、Java 中 final 关键字有什么用?


final 可以用来修饰引用(基本数据类型、引用数据类型、类的成员变量)、方法、类,分别是:


修饰基本数据类型:将 final 用于该变量的前面,则该变量就是一个常量,其值是不能被修改的,

修饰引用数据类型:比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。

修饰类的成员变量:必须初始化值,不然会报错。

修饰方法:表明该方法是不能被重写的,但是子类可以继承该方法,就是不能被子类修改此方法。

修饰类:表明该类是永远不能被继承的

2、面试题挑战 Day4 HTTP 是哪一层的协议?简述它的作用?


HTTP 是应用层协议,主要用于在 Web 浏览器和 Web 服务器之间传递数据。它是一种无状态的协议,即服务器不会保存关于客户端的任何信息,每次客户端发送请求,服务器都会返回响应。HTTP 协议通常基于 TCP 协议,使用 TCP 的 80 端口作为默认的传输端口。HTTP 协议主要作用包括:


建立连接:客户端与服务器建立 TCP 连接,然后发送 HTTP 请求,服务器接收请求并处理。

发送请求:客户端发送HTTP请求到服务器,包括请求方法(GET、POST、PUT等)、请求头(如User-Agent、Accept等)和请求正文(可选)等信息。

处理请求:服务器接收并解析 HTTP 请求,执行请求操作(如查询数据库等),并将处理结果返回给客户端。

返回响应:服务器返回HTTP响应,包括响应状态码(如200 OK、404 Not Found等)、响应头(如Content-Type、Cache-Control等)和响应正文(可选)等信息。

关闭连接:客户端接收到响应后,关闭TCP连接。

HTTP 的请求报文主要包括以下几个部分:


请求行:包括请求方法、URL 和 HTTP 协议版本。

请求头:包括一些请求头部信息,例如 User-Agent、Host 等。

空行:表示请求头结束。

请求体:实际请求的数据,例如表单提交的数据等。

HTTP 的响应报文主要包括以下几个部分:


状态行:包括 HTTP 协议版本、状态码和状态消息。

响应头:包括一些响应头部信息,例如 Server、Content-Type、Content-Length 等。

空行:表示响应头结束。

响应体:实际响应的数据,例如网页的 HTML 代码、图片、音频等。

HTTP 的状态码指示了服务器对请求的处理结果。常见的状态码包括 200 OK(请求成功)、301 Moved Permanently(永久重定向)、404 Not Found(未找到资源)和 500 Internal Server Error(服务器内部错误)等。


总之,HTTP 协议的作用是规定了 Web 应用程序中客户端和服务器之间的通信方式和数据传输格式,是支持 Web 应用程序开发的基础协议。

我的回答:


HTTP协议(Hyper Text Transfer Protocol,HTTP,全称为“超文本传输协议”)属于应用层的协议,用于客户端与服务器之间的传输超文本(如HTML、CSS、JavaScript等)和其他相关数据,是在TCP/IP协议基础之上建立的。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。


HTTP的主要作用包括:


客户端与服务器之间的通信:客户端通过发送HTTP请求与服务器进行通信,请求可以包含需要获取的资源、请求方法、HTTP版本号、请求头等信息。

数据传输:服务器接收到请求后,返回响应消息给客户端,响应消息包括响应状态码、响应头、响应体等内容。其中,响应体就是服务器返回的实际数据,如HTML页面、图片、视频等。

会话管理:HTTP协议是一种无状态协议,每次请求与响应之间是相互独立的。为了维护用户的状态,需要使用一些机制,如Cookie和Session。

HTTP协议是一种简单、灵活、可扩展的协议,它在Web应用开发中扮演着非常重要的角色。

3、什么是进程和线程?它们有哪些区别和联系?


在操作系统中,进程是指一个正在执行中的程序,而线程是进程的一部分,是一个程序中执行的代码片段。


进程是操作系统资源分配的最小单位,一个进程至少包括一个线程,进程拥有自己的内存空间、文件句柄、环境变量等系统资源。进程间相互独立,互不干扰,每个进程都拥有自己的地址空间。进程通信需要通过进程间通信机制(IPC)来实现。


线程是程序执行的最小单位,一个进程中可以包含多个线程,它们共享进程的内存空间和系统资源。多个线程可以并发执行,从而提高了程序的运行效率,同时也会带来线程安全等问题。线程之间的通信可以通过共享内存、信号量等机制实现。


进程和线程的区别和联系如下:


资源分配:进程拥有自己的内存空间等系统资源,而线程共享进程的资源;

独立性:进程之间相互独立,互不干扰,而线程是进程的一部分,线程之间共享进程的资源;

调度:进程间调度的开销比线程大,线程的调度开销小,可以并发执行;

并发性:多个进程之间相互独立,多个线程可以并发执行;

同步:进程间通信需要通过IPC机制,线程间同步可以通过共享内存、信号量等机制实现。

在实际开发中,多线程应用更加常见,因为线程的开销小,执行效率高,适用于需要并发执行的场景。但需要注意线程安全问题。而多进程应用通常更加稳定,但开销较大,适用于需要独立运行的场景。


有一个很形象的比喻,进程是一列火车,线程是每个车厢;


进程是指在系统中正在运行的一个程序,一个进程可以包含多个线程。


每个进程都有自己独立的内存空间和系统资源,不同的进程之间相互独立,互相之间不能访问彼此的内存空间。

进程通过操作系统提供的进程调度器来实现进程的调度和管理。

线程是进程中的一个执行单元,是操作系统进行运算调度的最小单位。


在一个进程中,多个线程可以共享相同的内存空间和系统资源,可以方便地进行通信和数据共享。

线程之间的切换开销较小,可以更加高效地实现并发任务。

区别与联系:


资源分配和调度:进程是操作系统进行资源分配和调度的基本单位,每个进程都拥有独立的资源(如内存、文件等)和执行状态。线程是进程内的执行单元,它共享进程的资源,但拥有独立的执行状态。由于进程之间的切换开销较大,所以多线程的应用比多进程的应用更加高效,可以更好地利用计算机的资源,提高应用程序的性能。

轻量级和重量级:创建和销毁进程需要消耗更多的系统资源和时间,因此进程是操作系统的重量级单位。而线程相对较轻量,创建和销毁线程的代价要比进程小得多。

同步:线程之间的共享内存和数据的操作需要进行同步和互斥,否则会出现数据竞争和死锁等问题

通信:由于线程共享进程的资源,因此它们可以很方便地进行数据共享和通信。而进程之间的通信需要使用一些IPC(Inter-Process Communication,进程间通信)机制,如管道、消息队列等。

并发性:多个线程可以同时执行,从而提高程序的并发性和性能。而多个进程之间也可以并发执行,但需要使用多进程编程的技术,如fork和exec等。

(1)一个线程从属于一个进程;一个进程可以包含多个线程。

(2)一个线程挂掉,对应的进程挂掉;一个进程挂掉,不会影响其他进程。

(3)进程是系统资源调度的最小单位;线程CPU调度的最小单位。

(4)进程系统开销显著大于线程开销;线程需要的系统资源更少。

(5)进程在执行时拥有独立的内存单元,多个线程共享进程的内存,如代码段、数据段、扩展段;但每个线程拥有自己的栈段和寄存器组。

(6)进程切换时需要刷新TLB并获取新的地址空间,然后切换硬件上下文和内核栈,线程切换时只需要切换硬件上下文和内核栈。

(7)通信方式不一样。

(8)进程适应于多核、多机分布;线程适用于多核

ES6新特性


ES6(ECMAScript 6)是 JavaScript 的第六个版本,也称为 ES2015,引入了很多新特性来增强 JavaScript 语言的能力。下面是 ES6 中一些常见的新特性:


let 和 const 声明变量

模板字符串(Template Literals)

解构赋值(Destructuring)

箭头函数(Arrow Functions)

Promise 对象

函数参数默认值

对象字面量增强(Object Literal Enhancements)

类和继承(Classes and Inheritance)

迭代器(Iterators)

生成器(Generators)

模块(Modules)

Set 和 Map 数据结构

Symbol 数据类型

for…of 循环

let 和 const 块级作用域

异步函数 async/await

ES6 的新特性增强了 JavaScript 的表现力和编程能力,使得开发者可以更加高效和便捷地编写代码。

目录
相关文章
|
7月前
|
消息中间件 存储 NoSQL
面试题30天打卡-day23
面试题30天打卡-day23
18 0
|
7月前
|
Java 关系型数据库 MySQL
面试题30天打卡-day03
面试题30天打卡-day03
16 0
|
6天前
面试题 08.04:幂集
面试题 08.04:幂集
17 0
|
7月前
|
存储 NoSQL 关系型数据库
面试题30天打卡-day20
面试题30天打卡-day20
35 0
|
7月前
|
负载均衡 NoSQL 安全
面试题30天打卡-day14
面试题30天打卡-day14
19 0
|
8月前
|
存储 缓存 NoSQL
【面试题系列】(一)
【面试题系列】(一)
|
9月前
|
Web App开发 前端开发 容器
【面试题总结3】
【面试题总结3】
|
9月前
|
缓存 前端开发 JavaScript
【面试题2】1
【面试题2】
|
9月前
|
JavaScript 前端开发 算法
|
11月前
|
存储 缓存 算法
2022 12月12日 每日面试题
2022 12月12日 每日面试题
67 0