记录首次面试2023-08-18

文章讲述了作者初次面试的经历,涉及数据库事务、隔离级别、进程间通信(包括共享内存)、网络协议(TCP/UDP)及链表反转等技术问题,反映了面试中的紧张和反思。

人生第一次面试,大概一个小时左右。没有问我C++的,上来一个数据库事务,虽然没有复习,但是还是能够记住一些,主要问的一些事务的隔离级别,以及都有什么作用,我是举例回答的,客户端A和客户端B,两者之间的事务开始,结束,之间的一些什么显示巴拉巴拉。接下来就是网络和操作系统,虽然忘了一些,但是大多数都知道。比如进程间通信,其中有一个问题让我说说共享内存的原理,我当时说的比较片面,就是让多个进程看到同一块空间,进程地址空间相关的似乎也说了,但是回去复习发现还是没有完全的表述出来,漏了一个性质,共享内存内部没有默认的进程之间的并行和互斥,而管道一类的才有。网络就是典型的三握四挥了,还有超时重传,拥塞控制一些能够提高可靠性和提高效率的一些性质。后来问了一些TCP以及UDP传输时,网站、视频,各种情况下都用的什么,我的回答是两者会互相切换,根据网络状态是否丢包,感觉这里答的还可以。
不过,面试官最后问,写一道反转链表吧,是类似于1 2 3 4反转成 2 1 4 3的两两交换。

面试官说不能直接交换值。当时心理活动是,觉得这题很简单。但是写着写着空指针了。。。时隔两天,突然想起来了这道题,打算写一下,结果直接就写出来了。无非就是三个指针互相迭代,细节我觉得就是prev一开始需要为空,并且while条件里需要都写上,第一次反转需要改头。
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;


//反转 1 2 3 4  -->  2 1 4 3
typedef struct ListNode
{
	int val;
	struct ListNode* next = nullptr;
	ListNode(int v = 0) :val(v)
	{}
}ListNode;


ListNode* ReverseNode(ListNode* head)
{
	ListNode* cur = head;
	ListNode* prev = nullptr;
	while (cur && cur->next)
	{

		ListNode* next = cur->next;
		if (cur == head)//改头
		{
			head = cur->next;
		}

		if (next)
		{

			cur->next = next->next;
			next->next = cur;
			if (prev) prev->next = next;
			prev = cur;
		}

		cur = cur->next;
	}

	return head;
}

int main()
{
	ListNode* n1 = new ListNode(1);
	ListNode* n2 = new ListNode(2);
	ListNode* n3 = new ListNode(3);
	ListNode* n4 = new ListNode(4);
	ListNode* n5 = new ListNode(5);
	ListNode* n6 = new ListNode(6);

	n1->next = n2;
	n2->next = n3;
	n3->next = n4;
	n4->next = n5;
	n5->next = n6;

	ListNode* res = ReverseNode(n1);
	while (res)
	{
		cout << res->val << endl;
		res = res->next;
	}

	return 0;
}

在这里插入图片描述
这么简单就完事了,悔不当初啊。或许第一次面试真的紧张吧。下次面试一定不紧张。

<think>好的,用户想了解关于keep-alive在面试中可能涉及的知识点,特别是HTTP keep-alive和Vue的keep-alive。我需要先分别整理这两个方面的内容,确保覆盖常见的问题和应用场景。 首先,关于HTTP keep-alive,这是HTTP协议中的一个特性,用于持久连接,减少TCP连接的重复建立和关闭,提高性能。常见的问题可能包括它的作用、如何工作、与短连接的区别、优缺点以及如何配置。需要结合HTTP/1.1的默认行为来解释,可能还要提到Connection头部字段的使用。 然后是Vue的keep-alive,这是一个内置组件,用于缓存组件实例,避免重复渲染。面试问题可能涉及其作用、原理、使用方式、生命周期钩子、缓存策略、与路由的结合使用(比如vue-router),以及常见的配置参数如include/exclude/max。需要引用提供的参考资料中的例子,比如结合v-if和路由的meta信息来控制缓存。同时,要注意提到的抽象组件特性,自身不渲染DOM,以及激活和停用时的生命周期activated和deactivated。 用户提供的引用中有几个关键点需要整合。例如,引用3提到keep-alive缓存组件实例而不是销毁,引用2和4展示了如何结合路由meta信息来条件渲染,引用5提到了应用场景如首页到详情页的缓存。这些都可以作为回答中的例子。另外,需要区分HTTP keep-alive和Vue的keep-alive,避免混淆。 可能还需要对比两者的不同,虽然名字相似,但作用完全不同。HTTP是网络连接层面的优化,而Vue的是组件缓存。面试中可能会被问到两者的区别,所以需要准备。 接下来要组织回答结构,分为HTTP和Vue两部分,每部分列出常见问题及答案,应用场景,以及原理。需要确保每个问题都有清晰的答案,并引用提供的资料中的内容,比如引用2中的代码示例,引用3中的优点,引用5的应用场景。 同时,用户可能需要知道如何在面试中展开回答,比如详细说明keep-alive的实现原理,如LRU缓存策略,或者结合vue-router的动态路由缓存配置。还要注意生命周期钩子的变化,比如activated和deactivated的使用场景。 最后,生成相关问题,帮助用户进一步准备面试。问题应覆盖原理、使用方式、优化、应用场景等方面,确保全面性。例如,HTTP keep-alive的优缺点,Vue中如何限制缓存数量,或者keep-alive与v-show的区别等。 需要检查是否有遗漏的知识点,比如HTTP/2中对keep-alive的不同处理,或者Vue的keep-alive在嵌套路由中的使用注意事项。同时确保LaTeX格式正确,如变量用$包裹,独立公式用$$,但在这个主题中可能数学公式较少,重点在代码示例和结构。 最后验证引用是否正确标注,比如引用2中的代码示例,引用3中的优点等,确保每个引用标识对应正确的来源。</think>### Vue中keep-alive核心知识点解析 #### 一、Vue keep-alive原理与应用 1. **核心作用** 通过缓存非活动组件实例(而非销毁),避免重复渲染,提升SPA应用性能。例如:从首页进入详情页时,若返回首页可直接复用缓存[^5]。 2. **实现原理** - 使用LRU(最近最少使用)算法管理缓存,通过`max`属性限制最大缓存数 - 抽象组件特性:不会渲染成真实DOM节点,仅处理组件实例逻辑[^3] - 缓存策略通过`include`/`exclude`属性指定组件名或正则表达式 3. **代码示例(路由结合)** ```html <keep-alive> <router-view v-if="$route.meta.keepAlive" :key="$route.path" /> </keep-alive> <router-view v-if="!$route.meta.keepAlive" :key="$route.path" /> ``` 通过路由元信息`meta.keepAlive`动态控制缓存[^2][^4] 4. **生命周期变化** - 新增`activated`(组件激活时触发) - `deactivated`(组件停用时触发) - `created`/`mounted`仅在初次加载时执行[^1] 5. **优化场景** - 表单内容保留(如分步表单) - Tab页切换内容保持 - 滚动位置记录与恢复[^5] --- #### 二、HTTP keep-alive核心知识点 1. **核心机制** 通过复用TCP连接实现: $$Connection: keep-alive$$ 默认在HTTP/1.1中启用,减少握手次数 2. **对比短连接** | 特性 | 短连接 | 长连接 | |------------|------------------|-----------------| | 连接次数 | 每次请求新建连接 | 复用现有连接 | | 延迟 | 较高 | 较低 | | 资源消耗 | 频繁释放 | 持续占用 | 3. **配置参数** ```nginx keepalive_timeout 60; # 空闲连接保持时间 keepalive_requests 100;# 单个连接最大请求数 ``` --- ### 面试高频问题解析 #### Vue相关 1. **keep-alive如何实现组件缓存?** 答:通过创建缓存对象存储组件实例,命中缓存时直接激活实例而非重新创建 2. **如何动态控制缓存?** 答:结合路由元信息和`v-if`指令,例如: ```html <keep-alive :include="cachedViews"> <router-view :key="$route.path" /> </keep-alive> ``` 通过Vuex管理`cachedViews`列表[^2] 3. **缓存过多会导致什么问题?** 答:内存占用过高,需通过`max`属性设置LRU淘汰策略 #### HTTP相关 1. **如何检测keep-alive是否生效?** 答:通过响应头`Connection: keep-alive`和网络调试工具查看TCP连接复用 2. **与HTTP/2多路复用的区别?** 答:HTTP/2在单一连接上并行传输多个请求,而keep-alive仍是串行处理 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都要进步呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值