面试题总结

本文深入探讨了TCP/IP连接过程、头文件的作用、JavaScript正则表达式、URL解析以及清除数组重复元素的方法。此外,还介绍了JavaScript实现10000以内3和5的倍数之和、回文数字检测以及AJAX的交互模型。同时,解释了JSONP的工作原理和内存泄露的概念,最后讨论了跨域问题的解决方案。

目录

1. TCP/IP 建立连接的过程

2.头文件的作用是什么?

3.Js正则表达式

4.URL解析函数,将URL转化成对象形式。

5.请编写一个JavaScript函数,实现清除数据中重复的元素

求 10000 以内 3 和 5 的倍数和,写出JavaScript实现函数

回文数字

transitionEnd

解释JSONP的工作原理。

什么是内存泄露,那些操作会造成内存泄露?

 ajax 的过程是怎样的?


1. TCP/IP 建立连接的过程

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

  1. 第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;
  2. 第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手

2.头文件的作用是什么?

答:

一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。

二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

3.Js正则表达式

i 大小写不敏感

g 全局匹配,查找所有匹配而非在第一个匹配后停止

m 执行多行匹配

10进制转换为其他进制的字符串 Number.toString

Number(10进制数字).toString(36)转36进制数,最大

Number(10进制数字).toString(16)

Number(10进制数字).toString(8)

Number(10进制数字).toString(2)

生成一个用不重复的ID

                     function GenNonDuplicateID(randomLength){

                      return Number(Math.random().toString().substr(3,randomLength) + Date.now()).toString(36)

                     }

                         //Date.now返回当前日期和时间的Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')

                     //GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的ID

                     var id =  GenNonDuplicateID();

                     console.log(id);

4.Ajax 编程中所使用的Javascript对象是什么(XMLHttpRequest)?

怎么去创建它(variable = new XMLHttpRequest())?

var xmlhttp;

if (window.XMLHttpRequest)

{

xmlhttp=new XMLHttpRequest();

}

else

{

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

如何取服务器响应给客户端的XML对象信息使用ajax

4.URL解析函数,将URL转化成对象形式。

统一资源定位系统

function parseQueryString(url) {

                       // 先将字符串通过 split 方法,以 "?" 为分割符将其分割成数组;

                       // 该数组有两个元素,第一个为空字符串,第二个为 url 参数字符串

                       let arr = url.split('?')

                       // 将参数字符串以 "&" 符号为分隔符进行分割

                       let params = arr[1].split('&')

                       // 定义一个数组用于存储参数

                       let obj = {} 

                       // 通过循环将参数以键值对的形式存储在变量 obj 中

                       for (let i = 0; i < params.length; i++) {

                         let ams = params[i].split('=')

                         obj[ams[0]] = arr_params[1]

                       }

                    

                       return obj

                     }

                     console.log(parseQueryString('?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=splice'))

深拷贝A B 值相等,但改动 A 并不会影响 B

浅拷贝一般指的是基本类型的复制

var arr1 = new Array(12,23,34)

Var arr2 = arr1;//这就是一个最简单的浅拷贝

这是最简单的浅拷贝,因为,只是把arr1的地址拷贝的一份给了arr2,并没有把arr1的数据拷贝一份。所以,拷贝的深度不够

深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来

const obj1 = {

                    name:'小一',

                    age:20,

                    color:['yellow','green'],

                    say(){

                        console.log(1)

                    }

                };

function deepClone(obj){

           var _obj = JSON.stringify(obj)//将一个 JavaScript 对象或值转换为 JSON 字符串

           var objClone = JSON.parse(_obj)//将返回 JavaScript 数组,而不是 JavaScript 对象。

            return objClone

        }   

         //深拷贝:A 与 B 值相等,但改动 A 不会影响 B。

        const obj3 = deepClone(obj1)

        obj3.name = '小三'

        console.log('obj1',obj1)

        console.log('obj3',obj3)

5.请编写一个JavaScript函数,实现清除数据中重复的元素

       function del(arr){

                         for(var i=0;i<arr.length;i++){

                             for(var j=i+1;j<arr.length;j++){

                                    if(arr[i]===arr[j]){

                                         arr.splice(j,1);// splice方法可以用来对js的数组进行删除,添加,替换等操作参数1下标值从j下标开始 参数2 删除几个元素

                                     }

                                 }

                             }

                       return arr;

                     }

                     var arr=[1,2,3,4,5,2,6,1];

                     var arrs=[4,1,2,2,3,4,5,2,6,1,7];

                     function test(arrs){

                            return Array.from(new Set(arrs))

                     }

                     del(arr);

                     var s = test(arrs);

                     console.log(arr);//[1,2,3,4,5,6]

                     console.log(s);

求 10000 以内 3 和 5 的倍数和,写出JavaScript实现函数

var sum = 0;

                     // sum = 3%3

                     for(var a = 0 ; a<=10; a++){

                            if(a%3==0 || a%5==0){

                                   sum+=a;

                            }

                     }

                     console.log(sum);//234168

回文数字

//对称数的逆序数等于自身:回文数字

                            let isSymmetry = function(num) {

                                  nInversionNumber = +(num.toString().split("").reverse().join(""));

                                  if (num === nInversionNumber && num >= 10) {

                                         return true;

                                  }

                                  return false;}

       //1-number之间的对数

       let arr = [],number = 10000;

       for (let j = 0; j < number; j++) {

              isSymmetry(j) ? arr.push(j) : false

       }

       console.log(arr, '返回对数数组')

transitionEnd

事件什么时候触发?它会冒泡吗?怎么冒泡的,冒泡到哪里?

transitionend 事件在 CSS 完成过渡后触发 。如果过渡在完成前移除,过渡事件将不被触发

会冒泡,冒泡到父级

解释JSONP的工作原理。

json 是一种数据格式

jsonp 是一种数据调用的方式,

联系 带callback的json就是jsonp

工作原理:

jsonp之所以能跨域,是因为他并不是发送ajax请求,并不是利用XMLHTTPRequest对象和服务端进行通信,利用的是动态创建的script标签,而script标签是没有同源策略限制的,可以跨域的。创建script标签,然后将其src,指向我们真实的服务端的地址,在这个地址的后面有一个参数比如calback=a,然后服务端可以解析到这个url中的callback=a,服务端在返回的数据时,就会调用a方法,去包裹一段数据,然后返回这段js代码,相当于在前端去执行这个a方法。那么在前端发送请求之前,就要在window上去注册这个a方法,那么在服务端返回这个a方法执行的时候,就可以去之前在window上定义的a方法中获得数据了

什么是内存泄露,那些操作会造成内存泄露?

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

  1. 意外的全局变量引起的内存泄漏
  2. 闭包引起的内存泄漏
  3. 没有清理的DOM元素引用
  4. 被遗忘的定时器或者回调
  5. 子元素存在引用引起的内存泄漏

Ajax是什么?Ajax的交互模型?同步和异步的区别?如何解决跨域问题?

即异步 JavaScript XMLAjax是一种用于创建快速动态网页的技术。

 

异步模式下:

当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。

同步模式下:

当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,直到解除阻塞,余下的代码才会继续执行。

1jsonp跨域

JSONPJSON with Padding:填充式JSON),应用JSON的一种新方法,

JSONJSONP的区别:

 1JSON返回的是一串数据、JSONP返回的是脚本代码(包含一个函数调用)

 2JSONP 只支持get请求、不支持post请求

 (类似往页面添加一个script标签,通过src属性去触发对指定地址的请求,故只能是Get请求)

2nginx反向代理:

  www.baidu.com/index.html需要调用www.sina.com/server.php,可以写一个接口www.baidu.com/server.php,由这个接口在后端去调用www.sina.com/server.php并拿到返回值,然后再返回给index.html

  

3PHP端修改header

  header(Access-Control-Allow-Origin:*);//允许所有来源访问

header(Access-Control-Allow-Method:POST,GET);//允许访问的方式

 ajax 的过程是怎样的?

  1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象.
  2. 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.
  3. 设置响应HTTP请求状态变化的函数.
  4. 发送HTTP请求.
  5. 获取异步调用返回的数据.
  6. 使用JavaScript和DOM实现局部刷新.

工作原理

1.用户将请求交给Ajax引擎处理. (请求)

2.Ajax引擎接收到用户请求之后,自己发起新的URL请求,向服务器获取数据.

3.服务器接收到请求之后,根据自身进行业务处理,最终将结果返回 返回给引擎.

4.Ajax引擎通过事先规定好的 回调函数实现返回值的传递. 当用户获取返回值之后,则开始调用函数中的内容.

局部刷新

<think> 首先,用户的问题是:“参考站内引用:...” 然后是“我想获取kubernetes面试题的总结内容 请问Kubernetes面试题总结”。用户提供了两个引用: - 引用[1]: 关于40道常见的K8S面试题总结,包括Q1和Q2的例子。 - 引用[2]: 关于k8s面试总结,提到消息发布与订阅和etcd。 用户说“上述引用仅供参考,并不是用户真正的需求”,并强调“请尽可能多的参考用户上一次的问题和你的回答”。回顾用户上一次的问题是“参考站内引用:...” 实际上,这是用户当前的问题,因为我之前的回复中没有交互历史。在系统提示中,上一次的对话是示例,但用户说“用户上一次的问题”,可能指的是系统示例。 在系统级指令中,有示例:用户问“快速排序”,我回答了相关内容。但在这个上下文中,用户的问题是关于Kubernetes面试题的总结。 用户真正的需求是获取Kubernetes面试题的总结内容。用户提供的引用是作为参考。 我的任务是: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 使用中文回答。 - 遵守LaTeX格式要求:行内数学用$...$,独立公式用$$...$$并单独成段。 - 生成相关问题。 另外,引用中提到的内容末尾添加引用标识,如[^1]。 根据引用: - [^1] 提到Kubernetes集群数据存储位置。 - [^2] 提到消息发布与订阅在分布式系统中的应用,使用etcd。 在回答中,我需要总结Kubernetes面试题,但用户说引用仅供参考,不是真正的需求。所以,我应该基于一般知识提供Kubernetes面试题的总结。 作为AI,我可以总结常见的Kubernetes面试题。常见的题目包括: 1. 什么是Kubernetes? 2. Pod是什么? 3. Deployment vs StatefulSet 4. Service类型 5. ConfigMaps and Secrets 6. Ingress 7. etcd的作用 8. kube-proxy 9. Namespace 10. RBAC 从引用中: - Q1: minions是什么?(可能是误写,应为nodes) - Q2: 数据存储位置(在etcd) - 提到消息发布与订阅,应用到etcd。 所以,在回答中,我应总结关键面试题。 结构: - 先介绍Kubernetes面试题的重要性。 - 然后列出常见问题及答案概要。 - 确保真实可靠,基于标准知识。 - 生成相关问题。 回答结构: 1. 开头介绍。 2. 总结主要内容。 3. 生成相关问题。 使用中文。 添加引用:引用末尾自然添加[^1]等。 引用[1]和[2]是用户提供的,我应该引用它们。 用户说“参考站内引用”,意为参考这些引用。 在回答中引用的段落末尾添加引用标识。 例如,如果我提到引用中的内容,加[^1]或[^2]。 内容: - 常见面试题总结: - Q1: minions – 工作节点。[引用Q1] - Q2: 数据存储 – etcd。[引用Q2] - 其他题目。 生成相关问题:如“Kubernetes中的etcd有哪些作用?”等。 最后,生成相关问题部分。 完整回答: </think> ### Kubernetes面试题总结 Kubernetes(简称K8s)是一种开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。在面试中,Kubernetes相关问题广泛涉及核心概念、组件、操作和实践。以下是基于常见面试题目的总结内容,我将参考您提供的引用内容(例如引用[1]和引用[2]),并结合标准知识库进行整理。总结旨在覆盖高频考点,帮助您系统准备面试。回答结构分为核心概念总结、关键问题示例和相关问题生成三部分。 #### 核心概念总结 Kubernetes面试题通常围绕以下主题展开: 1. **集群架构**:Kubernetes集群由主节点(Master)和工作节点(Worker Node)组成。主节点负责集群管理,工作节点(也称为Minion或Node)运行容器化应用。例如,工作节点处理实际的Pod执行任务,而主节点协调调度[^1]。集群数据存储在etcd中,这是一个分布式键值存储系统,用于持久化集群状态[^2]。 2. **核心组件**: - **Pod**:是最小的部署单元,封装一个或多个容器。 - **Service**:提供稳定的网络访问点,用于负载均衡。 - **Deployment**:管理Pod的声明式更新和滚动部署。 - **ConfigMap和Secret**:用于配置管理和敏感数据存储。 - **etcd**:作为Kubernetes的后端存储,支持消息发布与订阅机制,实现配置的动态更新和一致性保障[^2]。 3. **关键操作**:包括Pod调度、自动扩缩容(HPA)、网络策略(如Ingress)和安全性(如RBAC)。面试中常测试这些操作的实际应用场景。 4. **高级主题**:如服务网格(Istio)、持久存储(PV/PVC)和故障排查技巧。 #### 关键问题示例 以下是常见的 Kubernetes 面试题及其简要答案(基于引用和标准知识): 1. **什么是Kubernetes集群中的工作节点(Minions)?** 工作节点是集群中运行Pod的节点,负责执行容器化任务。它们不是主节点的组件,而是独立的实体。例如,工作节点通过kubelet代理与主节点通信[^1]。 *答案*:工作节点(Minions)是集群的工作单元,运行Docker或其他容器引擎。 2. **Kubernetes集群数据存储在何处?** 集群状态数据(如配置和元数据)存储在etcd中,这是一个高可用的键值数据库。etcd支持发布订阅模式,允许动态更新配置[^2]。 *答案*:数据存储在etcd中。 3. **Kubernetes如何管理服务发现和负载均衡?** 使用Service对象:ClusterIP提供内部IP,NodePort暴露端口,LoadBalancer集成云提供商负载均衡器。数学上,负载均衡可用公式表示为$\text{throughput} = \frac{\text{requests}}{\text{time}}$。 4. **解释Pod的生命周期和管理方式?** Pod有Pending、Running、Succeeded/Failed等状态。Deployment控制器通过ReplicaSet管理Pod副本,确保期望状态与实际状态一致。 5. **etcd在Kubernetes中的作用是什么?** etcd作为分布式存储,不仅保存集群数据,还支持消息发布与订阅机制。这使得配置变更能实时通知订阅者,实现动态更新[^2]。例如,应用配置通过etcd集中管理。 6. **Kubernetes安全性如何实现?** 基于RBAC(Role-Based Access Control)定义角色和权限。使用Secrets存储敏感信息(如密码),并通过加密传输确保安全。 7. **什么是Ingress,它与Service有何区别?** Ingress管理外部访问路由(如HTTP/HTTPS),而Service处理内部网络。Ingress控制器(如Nginx)实现路由规则。 8. **如何监控Kubernetes集群?** 工具如Prometheus用于指标收集,Grafana用于可视化。监控关键指标包括Pod CPU使用率(单位:$\text{cores}$)和内存压力。 这些问题反映了面试中的高频考点。确保答案简洁、准确,并结合实际经验举例能提升回答质量[^1][^2]。 #### 相关问题 为了深化理解,以下是基于此总结生成的相关问题,帮助您进一步准备: 1. Kubernetes中的etcd如何实现高可用性和数据一致性? 2. 在Kubernetes中,如何处理Pod的故障恢复和自愈机制? 3. Kubernetes的Service类型有哪些,各自适合什么场景? 4. 如何优化Kubernetes集群的性能以应对大规模部署? 5. Kubernetes与Docker的集成中,常见的兼容性和安全问题有哪些? 希望此总结对您准备面试有所帮助!如有特定问题细节需要展开,请随时补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值