Skip to content

Commit

Permalink
更新
Browse files Browse the repository at this point in the history
  • Loading branch information
white0dew committed Jun 25, 2024
1 parent 983e675 commit 87df48a
Show file tree
Hide file tree
Showing 16 changed files with 1,608 additions and 87 deletions.
46 changes: 28 additions & 18 deletions docs/doc/⬇️ 区区算法/hogrunp9g0bggri2.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: "\U0001F5E1 剑指OFFER精讲"
urlname: hogrunp9g0bggri2
date: '2024-05-28 16:50:31'
updated: '2024-06-24 12:30:19'
updated: '2024-06-25 21:58:55'
cover: 'https://cdn.nlark.com/yuque/0/2021/png/22382235/1629211889249-6820e8c8-0e98-4006-89f7-1eeb48220c00.png'
description: '001.赋值运算符函数有一个类声明如下,请重载其赋值运算符:class CMyString { public: CMyString(char *p = nullptr); CMyString(const CMyString& str); ~CMyString(); pr...'
---
Expand Down Expand Up @@ -1015,7 +1015,10 @@ public:
## **补充:动态规划**
![image.png](https://oss1.aistar.cool/elog-offer-now/93964339e2cb4ef25560bad539bd8c4b.png)
![image.png](https://oss1.aistar.cool/elog-offer-now/d8dc912977fb9a75e3c67731a0a6054b.png)
# **014.**剪绳子![image.png](https://oss1.aistar.cool/elog-offer-now/0ebd9f5cec5216c36abf72d0bd25a345.png)

# 014.剪绳子

![image.png](https://oss1.aistar.cool/elog-offer-now/0ebd9f5cec5216c36abf72d0bd25a345.png)
动态规划:O(n)的时间和空间消耗;
设f(i)为长度为i时,最大乘积,因此动态规划的公式就为:
**f(k)=max(f(i)*f(k-i))**
Expand Down Expand Up @@ -1071,7 +1074,8 @@ public:
}
};
```
# **015.**二进制中1的个数
# 015.二进制中1的个数

![image.png](https://oss1.aistar.cool/elog-offer-now/52196630fa776363aee9265f2c168b37.png)
利用**循环移位或者**%取余来进行移动;
```
Expand Down Expand Up @@ -1112,7 +1116,7 @@ int hammingWeight(uint32_t n) {
**广度优先搜索的缺点**:在树的层次较深&子节点数较多的情况下,**消耗内存十分严重**。广度优先搜索**适用于节点的子节点数量不多,并且树的层次不会太深的情况。**
那么**深度优先**就可以克服这个缺点,因为每次搜的过程,每一层只需维护一个节点。但回过头想想,**广度优先能够找到最短路径**,那深度优先能否找到呢?深度优先的方法是一条路走到黑,那显然无法知道这条路是不是最短的,**所以你还得继续走别的路去判断是否是最短路?**
深度优先搜索的缺点**:难以寻找最优解,仅仅只能寻找有解。其优点就是内存消耗小,克服了刚刚说的广度优先搜索的缺点。**
# **016.**数值的整数次方
# 016.数值的整数次方
![image.png](https://oss1.aistar.cool/elog-offer-now/4150fb6f8d1fcd233cfc59b881cffb8f.png)
难点就在于**底和幂如果小于****1(0或者负数)会怎样呢?**
也就是说在**计算的时候需要多判断一下**,另外似乎这个运算是不计较分数次幂的,因为幂是int型。(这道题的难点是考虑全面)
Expand Down Expand Up @@ -1143,13 +1147,14 @@ double myPow(double x, int n) {
}
return re;
}
# **017.**打印从1到最大的n位数
# 017.打印从1到最大的n位数
![image.png](https://oss1.aistar.cool/elog-offer-now/e9183e4405b4c2c4695c56308ed0f95e.png)
**这种题一定得思考大数问题,而一旦涉及大数问题基本就是用字符串来表示数字。(这种数字打印的题必考)**
主体代码如下:
![image.png](https://oss1.aistar.cool/elog-offer-now/e002d6538ab6849c49cdcb8b28d73421.png)
难点就在于如何判断**有没有进位**,以及如何按照**日常阅读习惯打印出最后的数据****遇到第一个非****0的字符才开始打印**)。
也就是分为三个部分,**主函数,字符串相加函数,省0操作**(直到找到第一个非0的数字)。
```
class Solution {
public:
vector<int> output;
Expand Down Expand Up @@ -1206,7 +1211,9 @@ public:
output.push_back(stoi(temp));
}
};
```
还有一种解法,从排列来考虑:打印到n位的数据其实就是n个0到9的全排列,**于是依次遍历每一位即可**。**需要用递归**
```
class Solution
{
public:
Expand Down Expand Up @@ -1264,7 +1271,8 @@ public:
}
}
};
# **018.**删除链表的节点
```
# 018.删除链表的节点
![image.png](https://oss1.aistar.cool/elog-offer-now/156e2e12408b0c372c7928f8ccacafb8.png)
![image.png](https://oss1.aistar.cool/elog-offer-now/647d2a0d3fcb25a5a91f3e26ebb2aadf.png)
也就是用next节点的下一个节点的信息覆盖next,而后删除next的下一个节点,那么就相当于**删掉了****next原节点**
Expand Down Expand Up @@ -1369,7 +1377,7 @@ public:
return head;
}
};
# **019.**正则表达式匹配
# 019.正则表达式匹配
![image.png](https://oss1.aistar.cool/elog-offer-now/da0d5a3de420522670838d8ab2ff06ba.png)
正则表达式是一种非常重要的题型。详细分析一下:
如果模式中的字符ch是‘.’,**可匹配任何一个字符**
Expand Down Expand Up @@ -1443,7 +1451,7 @@ public:
//或者return (*s == *p || (*p == '.' && *s != '\0')) && match(s + 1, p) || match(s, p + 2);
}
};
# **020.**表示数值的字符串
# 020.表示数值的字符串
![image.png](https://oss1.aistar.cool/elog-offer-now/cca964775302419365bc3584ff7aecaa.png)
这道题跟019类似,都是属于“模板匹配”类题型,只不过约束条件不一样。**关键就在于分析清楚到底有哪些可能的出现形式以及逻辑判断**,在面试的时候跟面试官讨论。
![image.png](https://oss1.aistar.cool/elog-offer-now/2742e62e59d5ab9147596671b6638708.png)
Expand Down Expand Up @@ -1483,7 +1491,7 @@ public:
return hasNum && index==n;
}
};
# **021.**使奇数位于偶数前面(参考第二种题解)
# 021.使奇数位于偶数前面(参考第二种题解)
![image.png](https://oss1.aistar.cool/elog-offer-now/3743239d254d4cdd5ab3441bc024eeb9.png)
交换顺序的题,**很大可能是用双指针**。即利用双指针的方法进行奇数偶数的快速交换(**如果需要保持数组的相对关系,那么应该从末尾往前进行双指针遍历**
高阶版本,考虑可扩展性,这里所说的可扩展性是指“奇数位于偶数前面”这一限制条件可以更改成任意的数学关系。即将此题解法拓展为可复用修改的代码。
Expand All @@ -1509,7 +1517,7 @@ public:
return nums;
}
};
# **022.**链表中倒数第k个节点
# 022.链表中倒数第k个节点
![image.png](https://oss1.aistar.cool/elog-offer-now/bd3cb57664ee65fab17ac2559eca6a3a.png)
最简单的方法,将链表节点依次压入栈,而后弹出想要的节点即可。
进阶一点呢,快慢指针,快指针先走k步,而后慢指针快指针同时前进,当快指针到达的时候,慢指针所指即是所需的节点。(但是关于快慢指针一定得注意是否会越界或者出现其他的错误信息)
Expand All @@ -1532,10 +1540,11 @@ ListNode* getKthFromEnd(ListNode* head, int k) {
return behind;

}
# **023.**链表中环的入口节点
# 023.链表中环的入口节点
![image.png](https://oss1.aistar.cool/elog-offer-now/99b1e02741b436584352a28e6ab54b42.png)
利用快慢指针:先找到快慢指针相遇的那个点。
先找到相遇点,**然后快指针重置为慢指针,同时走,再次相遇即是入口点;或是先看环有多少个点,而后让一个指针先走这么多点,重合处即是入口节点。(算法手册有相同的题解)**
```markdown
ListNode *detectCycle(ListNode *head) {
if(head==nullptr)
return head;
Expand All @@ -1561,6 +1570,7 @@ ListNode *detectCycle(ListNode *head) {
}
return fast;
}
```
# **024.反转链表**
![image.png](https://oss1.aistar.cool/elog-offer-now/e79b8b5d2840bd03dcfa8cfafc60eb90.png)
**这道题可参考算法手册6.6。**
Expand Down Expand Up @@ -1907,7 +1917,7 @@ bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
return st.empty();
}
```
# **032.**从上到下打印二叉树
# 032.从上到下打印二叉树
![image.png](https://oss1.aistar.cool/elog-offer-now/9e3322e982342e87801b77a157719566.png)
关键点就是如何实现一层一层的打印节点,**用队列,压入根结点而后逐个弹出打印再压入子节点。**
```cpp
Expand Down Expand Up @@ -3150,7 +3160,7 @@ public:
return mid;
}
};
# **054.**二叉搜索树的第K大节点
# 054.二叉搜索树的第K大节点
![image.png](https://oss1.aistar.cool/elog-offer-now/14c125968f01f723c2e461aa3c71e599.png)
法一,二叉搜索树,**中序遍历就是一个从小到大的排序数组**。找第K大,那就先遍历再输出对应位置的数字即可。
//正解:要想找第n大,只能先将二叉树变成一个数组,从中提取出想要的数
Expand Down Expand Up @@ -3203,7 +3213,7 @@ public:
      return n;
  }
};
# **055.**二叉树的深度
# 055.二叉树的深度
![image.png](https://oss1.aistar.cool/elog-offer-now/3f71116d1c391a2a248f85f65768602d.png)
法一、二叉树的深度其实就是**左右子树的最大深度****+1**,那么这就变成了一个简单的递归问题(DFS)。
class Solution {
Expand Down Expand Up @@ -3259,7 +3269,7 @@ bool isBalanced(TreeNode* root,int &pDepth) {
}
return false;
}
# **056.**数组中出现两次
# 056.数组中出现两次
![image.png](https://oss1.aistar.cool/elog-offer-now/e4475a0a61c6f7b8511fd38ec356d2fb.png)
法一、暴力求解;
法二、异或求解。
Expand Down Expand Up @@ -3306,7 +3316,7 @@ public:
      return res;
  }
};
# **057.**和为?的数字(两数之和)
# 057.和为?的数字(两数之和)
![image.png](https://oss1.aistar.cool/elog-offer-now/b1cd0120a32192443d98fe8195713bc4.png)
一开始通过s=a+b,想到a=s-b,所以直接遍历数组寻找是否存在对应的值即可,但是时间复杂度贼高,n平方。**不过基于这种想法可以利用双指针,提高搜索速度。(加上这个数组是排序的,根据和的**target的大小关系可以更轻松地确定指针前进的方向)**
```markdown
Expand Down Expand Up @@ -3369,7 +3379,7 @@ vector<vector<int>> findContinuousSequence(int target) {
return res;
}
```
# **058.**反转字符串
# 058.反转字符串
![image.png](https://oss1.aistar.cool/elog-offer-now/1725d85948763e45ff1b9d6cc5502d3a.png)
**一种解法是先反转****整体字符串,而后再顺序翻转每个单词即可;**
**PS:**
Expand Down Expand Up @@ -3482,7 +3492,7 @@ public:
![image.png](https://oss1.aistar.cool/elog-offer-now/0688213dbe89f5f8207418b48b89a2f1.png)
**这道题是上一道题的进阶版:将上题的法一应用到该题,需要旋转的部分和后续部分分为两个部分,而后先旋转所有,再分辨旋转前后两个部分,即可完成题目要求(这个需要实际遇到的时候推导一遍其特性);**
**也可以利用切片的思想,将旋转部分和后续部分分别切片再倒序拼接即可,实际实现过程使用**erase和+;
# **059.**队列的最大值 ![image.png](https://oss1.aistar.cool/elog-offer-now/750b569023b06bd5b2d5ccf7bb272119.png)
# 059.队列的最大值 ![image.png](https://oss1.aistar.cool/elog-offer-now/750b569023b06bd5b2d5ccf7bb272119.png)
**需要**滑几次?
nums-window+1次;

Expand Down
8 changes: 6 additions & 2 deletions docs/doc/🏄 关于/qfaugcu7d1ucqdq5.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
title: 更新日志
urlname: qfaugcu7d1ucqdq5
date: '2024-05-22 08:47:22'
updated: '2024-06-23 20:47:31'
description: '---nav_path: changelog2024-6-23新增keywords关键词2024-6-19新增内容:新增Go语言相关内容新增最强前端、最强后端相关内容新增友情链接功能2024-6-13优化网站排版:防止页面崩溃更新主页Icon增加网页动态效果适配部分移动端机型2024-6-06...'
updated: '2024-06-25 21:49:03'
description: '---nav_path: changelog2024-6-24修复主页字数错误更新智力题以及高频场景题2024-6-23新增keywords关键词2024-6-19新增内容:新增Go语言相关内容新增最强前端、最强后端相关内容新增友情链接功能2024-6-13优化网站排版:防止页面崩溃更新主页I...'
nav_path: changelog
---
## 2024-6-24

- 修复主页字数错误
- 更新智力题以及高频场景题
## 2024-6-23

- 新增keywords关键词
Expand Down
29 changes: 29 additions & 0 deletions docs/doc/💹 大厂面经/bzcgeyqlpmluo6ln.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
title: 经典智力题
urlname: bzcgeyqlpmluo6ln
date: '2024-05-22 08:44:28'
updated: '2024-06-25 21:47:25'
description: '---is_nav: truenav_path: iq大家好,我是白露啊。互联网行业为全球发展带来了巨大的推动力,同时也孕育了无数的工作机会。无论是刚刚步入职场的应届毕业生,还是希望挪岗换位的职场精英,互联网公司的面试都如一座大山,等待着我们去攀登。而其中尤为令人头疼的,便是那一系列考验智力和...'
is_nav: true
nav_path: iq
---
大家好,我是白露啊。

互联网行业为全球发展带来了巨大的推动力,同时也孕育了无数的工作机会。无论是刚刚步入职场的应届毕业生,还是希望挪岗换位的职场精英,互联网公司的面试都如一座大山,等待着我们去攀登。而其中尤为令人头疼的,便是那一系列考验智力和逻辑思维的面试题。

在这个专栏中,我将深入剖析互联网面试中的**智力题**,帮助你更好地应对面试官的刁钻问题。
**内容安排:**

1. **题型分类**:从经典的数字谜题到情景假设,从逻辑推理到概率计算,我们将细致地为你分类介绍各种常见的智力题类型。
2. **解题技巧**:提供一系列的解题思路和技巧,让你能够快速找到解决方案,并在面试中应对自如。
3. **实例解析**:精选多个实际案例进行深度解析,帮助你更好地理解题目背后的逻辑和考查点。
4. **常见误区**:指出在解答智力题时容易陷入的思维陷阱,并给出避免的方法和策略。
5. **模拟练习**:为你准备大量的模拟题目,供你随时练习,帮助你在真实面试中脱颖而出。

**通过这个专栏,你将获得:**

- **系统化的知识储备**:全面了解智力题的类型和解题方法,做到胸有成竹。
- **高效的解题策略**:掌握快速分析和解决题目的技巧,提升解题速度和准确度。
- **实战的面试经验**:通过模拟练习,提前熟悉面试环境和题型,以获得更好的临场表现。

**订阅我们的专栏,开启智力题解题之旅,助你在面试中脱颖而出!**
51 changes: 51 additions & 0 deletions docs/doc/💹 大厂面经/ddiqc8kv6p73lgsu.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
title: 高频场景题
urlname: ddiqc8kv6p73lgsu
date: '2024-05-22 08:44:13'
updated: '2024-06-25 21:47:11'
description: '---is_nav: truenav_path: scene大家好,我是白露啊。在互联网行业求职的道路上,过五关斩六将不仅仅需要扎实的知识储备和丰富的项目经验,还需要应对各种刁钻的面试题目。除了常见的技术问题,场景题作为一种重要的考查方式,常常让求职者感到束手无策。为了解决这一难题,我特别推出...'
is_nav: true
nav_path: scene
---
大家好,我是白露啊。在互联网行业求职的道路上,过五关斩六将不仅仅需要扎实的知识储备和丰富的项目经验,还需要应对各种刁钻的面试题目。除了常见的技术问题,**场景题**作为一种重要的考查方式,常常让求职者感到束手无策。
为了解决这一难题,我特别推出了这个专栏,帮助你全面解析互联网面试中的场景题,提升你的应对能力和面试信心。
### **专栏内容一览**
**1. 场景题汇总及基础解析**

- **秒杀系统设计**:并发量大、数据库承受压力,如何防止超卖?
- **短链接生成**:分布式ID生成器和62进制的使用方法。
- **高并发红包系统**:事务严格要求下如何实现并发控制?
- **分布式ID生成策略**:常见方法及其优缺点。
- **分布式限流**:固定窗口、滑动窗口、漏桶、令牌桶算法的实现与选择。
- **分布式定时任务**:任务轮询与抢占排队方案的应用。
- **新浪微博推送**:复杂关系下的大量数据处理策略。
- **大文件有限内存排序**:外归并排序和位图排序的具体操作。

**2. 实际案例深度解析**

- 我们将逐一剖析上述常见场景题,深入探讨各类架构设计和实现细节,特别是秒杀系统和高并发红包系统等高频问题。

**3. 技术难点及最佳实践**

- 重点讨论分布式系统中的缓存穿透、雪崩、高可用保障等问题,确保每个架构设计方案在实际应用中都具备可行性和可靠性。

**4. 高效解题技巧及思路**

- 提供解决场景题的系统化思路和技术要点,帮助你在面试时快速锁定答题方向,展示全面的思维能力。

**5. 模拟题练习与优化策略**

- 大量模拟题目供你练习,附详细解答和优化策略,让你在实战中不断提升,直到应对自如。

**6. 高频场景题总结及开放讨论**

- 定期总结高频出现的场景题,并通过开放讨论的方式,与广大求职者互动、交流,共同进步。
### **通过这个专栏,你将获得:**

- **系统而全面的技术储备**:深入了解各类场景题的设计理念、实现方式及关键点。
- **深度解析与实战演练**:逐步掌握解决复杂场景题的方法和技巧,通过不断练习,提高实际应战能力。
- **高效的解题策略**:增强技术思维的敏捷性和应对场景题目的自信心。
- **实时更新的理论与实践**:紧跟最新技术潮流,分享最前沿的解决方案和工程实践案例。
### **为你的互联网面试保驾护航**
互联网面试充满挑战,但只要掌握了全面的知识和有效的解题策略,任何难题都不再是拦路虎。**订阅我们的专栏,一起解密互联网面试中的场景题,助你轻松拿到心仪offer**
期待与你一同在这个专栏中,探索更多的面试精髓,成就更好的自己!
7 changes: 4 additions & 3 deletions docs/doc/💹 大厂面经/rnwghpv7c59vgtuo.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
title: "\U0001F525开发了面经小程序"
title: "\U0001F525开发一个面经小程序"
urlname: rnwghpv7c59vgtuo
date: '2024-05-14 21:15:56'
updated: '2024-06-19 23:42:44'
updated: '2024-06-25 21:41:31'
cover: 'https://cdn.nlark.com/yuque/0/2024/png/22382235/1718811751273-adc0a552-fc72-43d2-bffa-8b7e683804e4.png'
description: 大家好,我是白露。面试准备对于每一个校招、社招求职的人来说都是折磨。。。。。。吐了!为什么要考八股文?太难背了啊……到底要背什么题目啊大厂都会怎么问啊?……我和朋友开发了一个小程序,目标是:帮助一万个程序员拿到 Offer。这小程序做什么?全面的题库我们汇总了Java、C++、Go、前端、大数...
---
Expand Down Expand Up @@ -74,7 +74,8 @@ description: 大家好,我是白露。面试准备对于每一个校招、社

![image.png](https://oss1.aistar.cool/elog-offer-now/a25aa72d0d4f84fb01e8d53e8a74a4b8.png)

可以**点击下面的链接**购买/体验:
在微信小程序中搜索“**校招八股文**”:
![cd28169426579c7ead2269fde343d9e.jpg](https://oss1.aistar.cool/elog-offer-now/56d7a0c27c35e6c0275d7bb0809002a3.jpeg)

购买成功后,小程序内“**我的**”页面将显示会员标识。

Expand Down
Loading

0 comments on commit 87df48a

Please sign in to comment.