更新图片链接

This commit is contained in:
kama
2025-05-19 17:11:04 +08:00
parent b489cb69b5
commit ce6e658d14
315 changed files with 2499 additions and 1729 deletions

View File

@@ -5,15 +5,15 @@
平时大家在力扣上刷题,就是 核心代码模式,即给你一个函数,直接写函数实现,例如这样:
![](https://file.kamacoder.com/pics/20231109193631.png)
![](https://file1.kamacoder.com/i/algo/20231109193631.png)
而ACM模式是程序头文件main函数数据的输入输出都要自己处理例如这样
![](https://file.kamacoder.com/pics/20231109193743.png)
![](https://file1.kamacoder.com/i/algo/20231109193743.png)
大家可以发现 右边代码框什么都没有,程序从头到尾都需要自己实现,本题如果写完代码是这样的: (细心的录友可以发现和力扣上刷题是不一样的)
![](https://file.kamacoder.com/pics/20231109193931.png)
![](https://file1.kamacoder.com/i/algo/20231109193931.png)
**如果大家从一开始学习算法就一直在力扣上的话突然切到ACM模式会非常不适应**
@@ -21,15 +21,15 @@
知识星球里也有很多录友因为不熟悉ACM模式在面试的过程中吃了不少亏。
<div align="center"><img src='https://file.kamacoder.com/pics/20230727163624.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/20230727163624.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file.kamacoder.com/pics/20230727163938.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/20230727163938.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file.kamacoder.com/pics/20230727164042.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/20230727164042.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file.kamacoder.com/pics/20230727164151.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/20230727164151.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file.kamacoder.com/pics/20230727164459.png' width=500 alt=''></img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/20230727164459.png' width=500 alt=''></img></div>
## 面试究竟怎么考?
@@ -53,7 +53,7 @@
你只要能把卡码网首页的25道题目 都刷了 就把所有的ACM输入输出方式都练习到位了不会有任何盲区。
![](https://file.kamacoder.com/pics/20231109195056.png)
![](https://file1.kamacoder.com/i/algo/20231109195056.png)
而且你不用担心,题目难度太大,直接给自己劝退,**卡码网的前25道题目都是我精心制作的难度也是循序渐进的**,大家去刷一下就知道了。

View File

@@ -15,7 +15,7 @@
其输入用例,就是用一个数组来表述 二叉树,如下:
![](https://file.kamacoder.com/pics/20210914222335.png)
![](https://file1.kamacoder.com/i/algo/20210914222335.png)
一直跟着公众号学算法的录友 应该知道,我在[二叉树:构造二叉树登场!](https://mp.weixin.qq.com/s/Dza-fqjTyGrsRw4PWNKdxA),已经讲过,**只有 中序与后序 和 中序和前序 可以确定一棵唯一的二叉树。 前序和后序是不能确定唯一的二叉树的**。
@@ -24,7 +24,7 @@
很明显,是后台直接明确了构造规则。
再看一下 这个 输入序列 和 对应的二叉树。
![](https://file.kamacoder.com/pics/20210914222335.png)
![](https://file1.kamacoder.com/i/algo/20210914222335.png)
从二叉树 推导到 序列,大家可以发现这就是层序遍历。
@@ -36,7 +36,7 @@
顺序存储,就是用一个数组来存二叉树,其方式如图所示:
![](https://file.kamacoder.com/pics/20210914223147.png)
![](https://file1.kamacoder.com/i/algo/20210914223147.png)
那么此时大家是不是应该知道了,数组如何转化成 二叉树了。**如果父节点的数组下标是i那么它的左孩子下标就是i * 2 + 1右孩子下标就是 i * 2 + 2**。
@@ -80,7 +80,7 @@ TreeNode* construct_binary_tree(const vector<int>& vec) {
这个函数最后返回的 指针就是 根节点的指针, 这就是 传入二叉树的格式了,也就是 力扣上的用例输入格式,如图:
![](https://file.kamacoder.com/pics/20210914224422.png)
![](https://file1.kamacoder.com/i/algo/20210914224422.png)
也有不少同学在做ACM模式的题目就经常疑惑
@@ -176,7 +176,7 @@ int main() {
和 [538.把二叉搜索树转换为累加树](https://mp.weixin.qq.com/s/rlJUFGCnXsIMX0Lg-fRpIw) 中的输入是一样的
![](https://file.kamacoder.com/pics/20210914222335.png)
![](https://file1.kamacoder.com/i/algo/20210914222335.png)
这里可能又有同学疑惑你这不一样啊题目是null你为啥用-1。
@@ -184,11 +184,11 @@ int main() {
在来看,测试代码输出的效果:
![](https://file.kamacoder.com/pics/20210914230045.png)
![](https://file1.kamacoder.com/i/algo/20210914230045.png)
可以看出和 题目中输入用例 这个图 是一样一样的。 只不过题目中图没有把 空节点 画出来而已。
![](https://file.kamacoder.com/pics/20210914230118.png)
![](https://file1.kamacoder.com/i/algo/20210914230118.png)
大家可以拿我的代码去测试一下,跑一跑。
@@ -205,7 +205,7 @@ int main() {
**[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)**里有的录友已经开始三刷:
![](https://file.kamacoder.com/pics/20210727234031.png)
![](https://file1.kamacoder.com/i/algo/20210727234031.png)
只做过一遍,真的就是懂了一点皮毛, 第二遍刷才有真的对各个题目有较为深入的理解,也会明白 我为什么要这样安排刷题的顺序了。
@@ -419,4 +419,4 @@ func main() {
```
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -211,4 +211,4 @@ leetcode是专门针对算法练习的题库leetcode现在也推出了中文
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

312
problems/前序/gitserver.md Executable file
View File

@@ -0,0 +1,312 @@
# 一文手把手教你搭建Git私服
## 为什么要搭建Git私服
很多同学都问文章文档资料怎么备份啊自己电脑和公司电脑怎么随时同步资料啊等等这里呢我写一个搭建自己的git私服的详细教程
为什么要搭建一个Git私服呢而不是用Github免费的私有仓库有以下几点
* Github 私有仓库真的慢文件一旦多了或者有图片文件git pull 的时候半天拉不下来
* 自己的文档难免有自己个人信息放在github心里也是担心的
* 想建几个库就建几个,想几个人合作开发都可以,不香么?
**网上可以搜到很多git搭建但是说的模棱两可**而且有的直接是在本地搭建git服务既然是备份搭建在本地哪有备份的意义一定要有一个远端服务器 而且自己的电脑和公司的电脑还是同步自己的文章,文档和资料等等。
适合人群: 想通过git私服来备份自己的文章Markdown并做版本管理的同学
最后,写好每篇 Chat 是对我的责任,也是对你的尊重。谢谢大家~
正文如下:
-----------------------------
## 如何找到可以外网访问服务器
有的同学问了,自己的电脑就不能作为服务器么?
这里要说一下安装家庭带宽运营商默认是不会给我们独立分配公网IP的
一般情况下是一片区域公用一个公网IP池所以外网是不能访问到在家里我们使用的电脑的
除非我们自己去做映射这其实非常麻烦而且公网IP池 是不断变化的
辛辛苦苦做了映射运营商给IP一换我们的努力就白扯了
那我们如何才能找到一个外网可以访问的服务器呢,此时云计算拯救了我们。
推荐大家选一家云厂商(阿里云,腾讯云,百度云都可以)在上面上买一台云服务器
* [阿里云活动期间服务器购买](https://www.aliyun.com/minisite/goods?taskCode=shareNew2205&recordId=3641992&userCode=roof0wob)
* [腾讯云活动期间服务器购买](https://curl.qcloud.com/EiaMXllu)
云厂商经常做活动,如果从来没有买过云服务器的账号更便宜,低配一年一百块左右的样子,强烈推荐一起买个三年。
买云服务器的时候推荐直接安装centos系统。
这里要说一下,有了自己的云服务器之后 不仅仅可以用来做git私服
**同时还可以做网站,做程序后台,跑程序,做测试**(这样我们自己的电脑就不会因为自己各种搭建环境下载各种包而搞的的烂糟糟),等等等。
有自己云服务器和一个公网IP真的是一件非常非常幸福的事情能体验到自己的服务随时可以部署上去提供给所有人使用的喜悦。
外网可以访问的服务器解决了接下来就要部署git服务了
本文将采用centos系统来部署git私服
## 服务器端安装Git
切换至root账户
```
su root
```
看一下服务器有没有安装git如果出现下面信息就说明是有git的
```
[root@instance-5fcyjde7 ~]# git
usage: git [--version] [--help] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
The most commonly used git commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty Git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG
'git help -a' and 'git help -g' lists available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
```
如果没有git就安装一下yum安装的版本默认是 `1.8.3.1`
```
yum install git
```
安装成功之后,看一下自己安装的版本
```
git --version
```
## 服务器端设置Git账户
创建一个git的linux账户这个账户只做git私服的操作也是为了安全起见
如果不新创建一个linux账户在自己的常用的linux账户下创建的话哪天手抖 来一个`rm -rf *` 操作 数据可全没了
**这里linux git账户的密码设置的尽量复杂一些我这里为了演示就设置成为'gitpassword'**
```
adduser git
passwd gitpassword
```
然后就要切换成git账户进行后面的操作了
```
[root@instance-5fcyjde7 ~]# su - git
```
看一下自己所在的目录是不是在git目录下面
```
[git@instance-5fcyjde7 ~]$ pwd
/home/git
```
## 服务器端密钥管理
创建`.ssh` 目录,如果`.ssh` 已经存在了,可以忽略这一项
为啥用配置ssh公钥呢同学们记不记得我使用github上传代码的时候也要把自己的公钥配置上传到github上
这也是方面每次操作git仓库的时候不用再去输入密码
```
cd ~/
mkdir .ssh
```
进入.ssh 文件下,创建一个 `authorized_keys` 文件,这个文件就是后面就是要放我们客户端的公钥
```
cd ~/.ssh
touch authorized_keys
```
别忘了`authorized_keys`给设置权限,很多同学发现自己不能免密登陆,都是因为忘记了给`authorized_keys` 设置权限
```
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
```
接下来我们要把客户端的公钥放在git服务器上我们在回到客户端创建一个公钥
在我们自己的电脑上,有公钥和私钥 两个文件分别是:`id_rsa``id_rsa.pub`
如果是`windows`系统公钥私钥的目录在`C:\Users\用户名\.ssh`
如果是mac 或者 linux 公钥和私钥的目录这里 `cd ~/.ssh/` 如果发现自己的电脑上没有公钥私钥,那就自己创建一个
创建密钥的命令
```
ssh-keygen -t rsa
```
创建密钥的过程中,一路点击回车就可以了。不需要填任何东西
把公钥拷贝到git服务器上将我们刚刚生成的`id_rsa.pub`拷贝到git服务器的`/home/git/.ssh/`目录
在git服务器上将公钥添加到`authorized_keys` 文件中
```
cd /home/git/.ssh/
cat id_rsa.pub >> authorized_keys
```
如何看我们配置的密钥是否成功呢, 在客户端直接登录git服务器看看是否是免密登陆
```
ssh git@git服务器ip
```
例如:
```
ssh git@127.0.0.1
```
如果可以免密登录,那就说明服务器端密钥配置成功了
## 服务器端部署Git 仓库
我们在登陆到git 服务器端,切换为成 git账户
如果是root账户切换成git账户
```
su - git
```
如果是其他账户切换为git账户
```
sudo su - git
```
进入git目录下
```
cd ~/git
```
创建我们的第一个Git私服的仓库我们叫它为world仓库
那么首先创建一个文件夹名为: world.git ,然后进入这个目录
有同学问,为什么文件夹名字后面要放`.git` 其实不这样命名也是可以的
但是细心的同学可能注意到我们平时在github上 `git clone` 其他人的仓库的时候,仓库名字后面,都是加上`.git`
例如下面这个例子其实就是github对仓库名称的一个命名规则所以我们也遵守github的命名规则。
```
git clone https://github.com/youngyangyang04/NoSQLAttack.git
```
所以我们的操作是
```
[git@localhost git]# mkdir world.git
[git@localhost git]# cd world.git
```
初始化我们的`world`仓库
```
git init --bare
```
**如果我们想创建多个仓库就在这里创建多个文件夹并初始化就可以了和world仓库的操作过程是一样一样的**
现在我们服务端的git仓库就部署完了接下来就看看客户端如何使用这个仓库呢
## 客户端连接远程仓库
我们在自己的电脑上创建一个文件夹 也叫做`world`
其实这里命名是随意的但是我们为了和git服务端的仓库名称保持同步。 这样更直观我们操作的是哪一个仓库。
```
mkdir world
cd world
```
进入world文件并初始化操作
```
cd world
git init
```
在world目录上创建一个测试文件并且将其添加到git版本管理中
```
touch test
git add test
git commit -m "add test file"
```
将次仓库和远端仓库同步
```
git remote add origin git@git服务器端的ip:world.git
git push -u origin master
```
此时这个test测试文件就已经提交到我们的git远端私服上了
## Git私服安全问题
这里有两点安全问题
### linux git的密码不要泄露出去
否则,别人可以通过 ssh git@git服务器IP 来登陆到你的git私服服务器上
当然了,这里同学们如果买的是云厂商的云服务器的话
如果有人恶意想通过 尝试不同密码链接的方式来链接你的服务器,重试三次以上
这个客户端的IP就会被封掉同时邮件通知我们可以IP来自哪里
所以大可放心 密码只要我们不泄露出去基本上不会有人同时不断尝试密码的方式来登上我们的git私服服务器
### 私钥文件`id_rsa` 不要给别人
如果有人得到了这个私钥就可以免密码登陆我们的git私服上了我相信大家也不至于把自己的私钥主动给别人吧
## 总结
这里就是整个git私服搭建的全过程安全问题我也给大家列举了出来接下来好好享受自己的Git私服吧
**enjoy!**

124
problems/前序/kvstore.md Executable file
View File

@@ -0,0 +1,124 @@
# 手把手带你实现存储引擎
之前在 [刷题攻略登上榜首](https://mp.weixin.qq.com/s/wZRTrA9Rbvgq1yEkSw4vfQ)这篇文章中说过Carl不仅写了刷题攻略还写了很多优秀的开源项目。
在星球里也有很多小伙伴问我关于一些,项目的选择,**相信如果是C++后台开发路线的话基本都会去做WebServer 服务器**。
我在[知识星球](https://programmercarl.com/other/kstar.html)给小伙伴答疑,包括看了这么多简历,**发现WebServer这个项目是真的多有点烂大街了**。
所以今天我把自己曾经开发的 KV存储引擎 给大家介绍一波,大家可以拿去当做自己的项目经验。
**相信只要是搞后端的同学应该都要熟悉非关系型数据库redis吧那么应该知道redis的存储引擎是跳表实现的**
现在很多云厂商提供的云数据库其底层都是用了Facebook开源的rocksdb而rocksdb的底层是Google开源的Levedb**而Levedb的核心实现也是跳表**。
所以大家应该知道跳表的应用有多么的广泛了。
那么为什么这个项目非常合适大家用来做自己的项目经验呢?
如果你是后端开发的话你在简历上一定会写熟悉或者了解redis吧那么可以进一步介绍一下自己的项目用跳表实现了redis核心引擎。
面试官一定会非常感兴趣的然后你就可以和面试官侃侃而谈你是如何用跳表实现的这个KV存储引擎的。
**瞬间逼格就高了,有木有!**
我在18年的时候用跳表实现了一个轻量级KV存储引擎代码也写的非常规范熟悉我的录友应该知道我的代码严格按照Google C++ style来的。
因为当时我是想把这个项目国际化的注释和readme都是英文的但最近我把这个项目又汉化回来了方便大家理解。
给大家先随意看一段代码我在注释中其实就已经在讲解跳表的运行原理了。代码使用了C++模板编程,这样接口支持任意类型的数据(包括自己自定义的类)
![](https://file1.kamacoder.com/i/algo/20221104121454.png)
项目地址:**https://github.com/youngyangyang04/Skiplist-CPP**
这个项目中的代码质量是非常高的如果无论是C++特性的运用,还是代码风格都是绝对拿得出手的!
好了,牛逼吹完,然后给大家正式介绍一下这个项目
## KV存储引擎
本项目就是基于跳表实现的轻量级键值型存储引擎使用C++实现。插入数据、删除数据、查询数据、数据展示、数据落盘、文件加载数据,以及数据库大小显示。
在随机写读情况下该项目每秒可处理啊请求数QPS: 24.39w每秒可处理读请求数QPS: 18.41w
## 项目展示
![](https://file1.kamacoder.com/i/algo/20221104121509.png)
文件功能:
* main.cpp 包含skiplist.h使用跳表进行数据操作
* skiplist.h 跳表核心实现
* README.md 中文介绍
* README-en.md 英文介绍
* bin 生成可执行文件目录
* makefile 编译脚本
* store 数据落盘的文件存放在这个文件夹
* stress_test_start.sh 压力测试脚本
* LICENSE 使用协议
## 提供接口
* insertElement插入数据
* deleteElement删除数据
* searchElement查询数据
* displayList展示已存数据
* dumpFile数据落盘
* loadFile文件加载数据
* size返回数据规模
## 存储引擎数据表现
### 插入操作
跳表树高18
采用随机插入数据测试:
|插入数据规模(万条) |耗时(秒) |
|---|---|
|10 |0.316763 |
|50 |1.86778 |
|100 |4.10648 |
每秒可处理写请求数QPS: 24.39w
### 取数据操作
|取数据规模(万条) |耗时(秒) |
|---|---|
|10|0.47148 |10|
|50|2.56373 |50|
|100|5.43204 |100|
每秒可处理读请求数QPS: 18.41w
## 项目运行方式
```
make // complie demo main.cpp
./bin/main // run
```
运行截图:(其中展示了插入数据,删除数据,展示数据等等功能)
![](https://file1.kamacoder.com/i/algo/20221104121525.png)
如果想自己写程序使用这个kv存储引擎只需要在你的CPP文件中include skiplist.h 就可以了。
可以运行如下脚本测试kv存储引擎的性能当然你可以根据自己的需求进行修改
```
sh stress_test_start.sh
```
项目地址:**https://github.com/youngyangyang04/Skiplist-CPP**
**大家白嫖的同时别忘了给个starfork支持一波** 录友如果最后拿到offer了也别忘了和我道个喜哦。

129
problems/前序/server.md Executable file
View File

@@ -0,0 +1,129 @@
# 一台服务器有什么用!
* [阿里云活动期间服务器购买](https://www.aliyun.com/minisite/goods?taskCode=shareNew2205&recordId=3641992&userCode=roof0wob)
* [腾讯云活动期间服务器购买](https://curl.qcloud.com/EiaMXllu)
但在组织这场活动的时候,了解到大家都有一个共同的问题: **这个服务器究竟有啥用??**
这真是一个好问题,而且我一句两句还说不清楚,所以就专门发文来讲一讲。
同时我还录制的一期视频,我的视频号,大家可以关注一波。
一说到服务器,可能很多人都说搞分布式,做计算,搞爬虫,做程序后台服务,多人合作等等。
其实这些普通人都用不上,我来说一说大家能用上的吧。
## 搭建git私服
大家平时工作的时候一定有一个自己的工作文件夹,学生的话就是自己的课件,考试,准备面试的资料等等。
已经工作的录友会有一个文件夹放着自己重要的文档Markdown图片简历等等。
这么重要的文件夹,而且我们每天都要更新,也担心哪天电脑丢了,或者坏了,突然这些都不见了。
所以我们想备份嘛。
还有就是我们经常个人电脑和工作电脑要同步一些私人资料,而不是用微信传来传去。
这些都是git私服的使用场景而且很好用。
大家也知道 githubgitee也可以搞私人仓库 用来备份同步文件但自己的文档可能放着很多重要的信息包括自己的各种密码密钥之类的放到上面未必安全。你就不怕哪些重大bug把你的信息都泄漏了么[机智]
更关键的是github 和 gitee都限速的。毕竟人家的功能定位并不是网盘。
项目里有大文件几百M以上例如pdfppt等等 其上传和下载速度会让你窒息。
**后面我会发文专门来讲一讲如何大家git私服**
## 搞一个文件存储
这个可以用来生成文件的下载链接,也可以把本地文件传到服务器上。
相当于自己做一个对象存储,其实云厂商也有对象存储的产品。
不过我们自己也可以做一个,不够很多很同学应该都不知道对象存储怎么用吧,其实我们用服务器可以自己做一个类似的公司。
我现在就用自己用go写的一个工具部署在服务器上。 用来和服务器传文件,或者生成一些文件的临时下载链接。
这些都是直接命令行操作的,
操作方式这样,我把命令包 包装成一个shell命令想传那个文件直接 uploadtomyserver然后就返回可以下载的链接这个文件也同时传到了我的服务器上。
![](https://file1.kamacoder.com/i/algo/20211126165643.png)
我也把我的项目代码放在了github上
https://github.com/youngyangyang04/fileHttpServer
感兴趣的录友可以去学习一波顺便给个star。
## 网站
做网站,例如 大家知道用html 写几行代码,就可以生成一个网页,但怎么给别人展示呢?
大家如果用自己的电脑做服务器,只能同一个路由器下的设备可以访问你的网站,可能这个设备出了这个屋子 都访问不了你的网站了。
因为你的IP不是公网IP。
如果有了一台云服务器都是配公网IP你的网站就可以让任何人访问了。
或者说 你提供的一个服务就可以让任何人使用。
例如第二个例子中,我们可以自己开发一个文件存储,这个服务,我只把把命令行给其他人,其他人都可以使用我的服务来生成链接,当然他们的文件也都传到了我的服务器上。
再说一个使用场景。
我之前在组织免费里服务器的活动的时候阿里云给我一个excel让面就是从我这里买服务器录友的名单我直接把这个名单甩到群里让大家自己检查出现在名单里就可以找我返现这样做是不是也可以。
这么做有几个很大的问题:
* 大家都要去下载excel做对比会有人改excel的内容然后就说是从你这里买的我不可能挨个去比较excel有没有改动
* excel有其他人的个人信息这是不能暴漏的。
* 如果每个人自己用excel查询私信我返现一个将近两千人找我返现我微信根本处理不过来这就变成体力活了。
那应该怎么做呢,
我就简单写一个查询的页面后端逻辑就是读一个execel表格大家在查询页面输入自己的阿里云ID如果在excel里页面就会返回返现群的二维码大家就可以自主扫码加群了。
这样,我最后就直接在返现群里 发等额红包就好了,是不是极大降低人力成本了
当然我是把 17个返现群的二维码都生成好了按照一定的规则展现给查询通过的录友。
就是这样一个非常普通的查询页面。
![](https://file1.kamacoder.com/i/algo/20211126160200.png)
查询通过之后,就会展现返现群二维码。
![](https://file1.kamacoder.com/i/algo/20211127160558.png)
但要部署在服务器上因为没有公网IP别人用不了你的服务。
## 学习linux
学习linux其实在自己的电脑上搞一台虚拟机或者安装双系统也可以学习不过这很考验你的电脑性能如何了。
如果你有一个服务器,那就是独立的一台电脑,你怎么霍霍就怎么霍霍,而且一年都不用关机的,可以一直跑你的任务,和你本地电脑也完全隔离。
更方便的是你目前系统假如是CentOS想做一个实验需要在Ubuntu上如果是云服务器更换系统就是在 后台点一下,一键重装,云厂商基本都是支持所有系统一件安装的。
我们平时自己玩linux经常是配各种环境然后这个linux就被自己玩坏了一般都是毫无节制使用root权限导致的总之就是环境配不起来了基本就要重装了。
那云服务器重装系统可太方便了。
还有就是加入你好不容易配好的环境,如果以后把这个环境玩坏了,你先回退这之前配好的环境而不是重装系统在重新配一遍吧。
那么可以用云服务器的镜像保存功能,就是你配好环境的那一刻就可以打一个镜像包,以后如果环境坏了,直接回退到上次镜像包的状态,这是不是就很香了。
## 总结
其实云服务器还有很多其他用处,不过我就说一说大家普遍能用的上的。
* [阿里云活动期间服务器购买](https://www.aliyun.com/minisite/goods?taskCode=shareNew2205&recordId=3641992&userCode=roof0wob)
* [腾讯云活动期间服务器购买](https://curl.qcloud.com/EiaMXllu)

View File

@@ -62,7 +62,7 @@ IDE那么很吃内存打开个IDE卡半天用VIM就很轻便了秒开
来感受一下PowerVim的使用体验看起来很酷吧注意这些操作都不用鼠标的一波键盘控制流所以我平时写代码是不碰鼠标的
![](https://code-thinking.cdn.bcebos.com/gifs/vim_overview.gif)
![](https://file1.kamacoder.com/i/algo/vim_overview.gif)
## 安装
@@ -93,7 +93,7 @@ sh install.sh
当然 还有很多我还详细写了PowerVim的快捷键使用方法插件配置等等都在Github主页的README上。当时我的Github上写的都是英文README这次为了方便大家阅读我又翻译成中文README。
![](https://file.kamacoder.com/pics/20211013102249.png)
![](https://file1.kamacoder.com/i/algo/20211013102249.png)
Github地址[https://github.com/youngyangyang04/PowerVim](https://github.com/youngyangyang04/PowerVim)

View File

@@ -1,125 +0,0 @@
# 上海互联网公司总结
**个人总结难免有所疏忽,欢迎大家补充,公司好坏没有排名哈!**
## 一线互联网
* 百度(上海)
* 阿里(上海)
* 腾讯(上海)
* 字节跳动(上海)
* 蚂蚁金服(上海)
## 外企IT/互联网/硬件
* 互联网
* Google上海
* 微软(上海)
* LeetCode/力扣(上海)
* unity上海游戏引擎
* SAP上海主要产品是ERP
* PayPal上海在线支付鼻祖
* eBay上海电子商务公司
* 偏硬件
* IBM上海
* Tesla上海特斯拉
* Cisco上海思科
* Intel上海
* AMD上海半导体产品领域
* EMC上海易安信是美国信息存储资讯科技公司
* NVIDIA上海英伟达是GPU(图形处理器)的发明者,人工智能计算的引领者
## 二线互联网
* 拼多多(总部)
* 饿了么(总部)阿里旗下。
* 哈啰出行(总部)阿里旗下
* 盒马(总部)阿里旗下
* 哔哩哔哩(总部)
* 阅文集团(总部)腾讯旗下
* 爱奇艺(上海)百度旗下
* 携程(总部)
* 京东(上海)
* 网易(上海)
* 美团点评(上海)
* 唯品会(上海)
## 硬件巨头 (有软件/互联网业务)
华为(上海)
## 三线互联网
* PPTV总部
* 微盟(总部)企业云端商业及营销解决方案提供商
* 喜马拉雅(总部)
* 陆金所(总部)全球领先的线上财富管理平台
* 口碑(上海)阿里旗下。
* 三七互娱(上海)
* 趣头条(总部)
* 巨人网络(总部)游戏公司
* 盛大网络(总部)游戏公司
* UCloud总部云服务提供商
* 达达集团(总部)本地即时零售与配送平台
* 众安保险(总部)在线财产保险
* 触宝总部触宝输入法等多款APP
* 平安系列
## 明星创业公司
* 小红书(总部)
* 叮咚买菜(总部)
* 蔚来汽车(总部)
* 七牛云(总部)
* 得物App总部品潮流尖货装备交易、球鞋潮品鉴别查验、互动潮流社区
* 收钱吧(总部)开创了中国移动支付市场“一站式收款”
* 蜻蜓FM总部音频内容聚合平台
* 流利说(总部)在线教育
* Soul总部社交软件
* 美味不用等(总部)智慧餐饮服务商
* 微鲸科技(总部)专注于智能家居领域
* 途虎养车(总部)
* 米哈游(总部)游戏公司
* 莉莉丝游戏(总部)游戏公司
* 樊登读书(总部)在线教育
## AI独角兽公司
* 依图科技(总部)和旷视,商汤对标,都是做安防视觉
* 深兰科技(总部)致力于人工智能基础研究和应用开发
## 其他行业,涉及互联网
* 花旗、摩根大通等一些列金融巨头
* 百姓网
* 找钢网
* 安居客
* 前程无忧
* 东方财富
* 三大电信运营商:中国移动、中国电信、中国联通
* 沪江英语
* 各大银行
通知:很多同学感觉自己基础还比较薄弱,想循序渐进的从头学一遍数据结构与算法,那你来对地方了。在公众号左下角「算法汇总」里已经按照各个系列难易程度排好顺序了,大家跟着文章顺序打卡学习就可以了,留言区有很多录友都在从头打卡!「算法汇总」会持续更新,大家快去看看吧!
## 总结
大家如果看了[北京有这些互联网公司,你都知道么?](https://programmercarl.com/前序/北京互联网公司总结.html)和[深圳原来有这么多互联网公司,你都知道么?](https://programmercarl.com/前序/深圳互联网公司总结.html)就可以看出中国互联网氛围最浓的当然是北京,其次就是上海!
很多人说深圳才是第二上海没有产生BAT之类的企业。
**那么来看看上海在垂直领域上是如何独领风骚的视频领域B站电商领域拼多多小红书生活周边有饿了么大众点评现与美团合并互联网金融有蚂蚁金服和陆金所出行领域有行业老大携程而且BAT在上海都有部门还是很大的团队再加上上海众多的外企以及金融公司有互联网业务**
此时就能感受出来,上海的互联网氛围要比深圳强很多!
好了希望这份list可以帮助到想在上海发展的录友们。
相对于北京和上海,深圳互联网公司断层很明显,腾讯一家独大,二线三线垂直行业的公司很少,所以说深圳腾讯的员工流动性相对是较低的,因为基本没得选。
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>

View File

@@ -1,240 +0,0 @@
# 揭秘互联网大厂研发流程
[B站揭秘互联网大厂研发流程](https://www.bilibili.com/video/BV1KR4y1H7ST)
很多录友会很好奇这么个事:
* 大厂的研发流程应该是什么样的呢
* 为什么会有那么多繁琐的流程呢
* 每一步都有什么作用呢
这次给大家介绍一波大厂的研发流程,让大家明明白白。
其实对于几十人或者上百人一起开发一个项目的话,一个规范的研发流程是很重要的。
有的同学可能想,哪有这么多流程啊,就是写完代码,跑一下,没问题,然后就上线了。
其实在大厂里研发流程是很重要的。
**一个项目从开发到上线到后面的维护,从流程上就保证大家少出错,也方便后面人继续维护**
那么接下来给大家介绍一下详细的流程。
## 1.需求文档
看需求文档,我们要根据需求文档来确定我们究竟要做什么。
一些同学可能感觉 为什么还要用一个需求文档呢,你就告诉我做啥我就做啥不就完事了?
需求文档一方面是**倒逼产品经理去系统性的思考这个需求究竟有哪些功能**,用来满足哪些用户的需求。
另一方面是**保证我们在研发的时候,研发出来的功能是满足需求文档里所描述的**。
如果是口头对接的话,很有可能就是你做出来的东西,产品经理看完感觉:这和我说的需求不一样啊!!这和我想的不一样啊!!
这样就是两个人相互“甩锅”,那这究竟是谁的锅呢。都没有一个证据,对吧。
所以说,有一个需求文档很重要。
而且每个阶段的需求文档相当于是把这个项目的整个迭代过程都记录下来了。
这样也方便后面的人,了解这个项目是如何迭代的。
## 2.这个需求包含了哪些功能
产品经理在需求文档里描述一个功能,那么我们在实现的时候,可能要改很多模块,或者说我们要增加一些模块。
就是我们从代码的角度上来讲,可能要增添很多功能才能满足 用户看起来好像微不足道的小功能。
例如点击登录,点击下单,后台都有很多模块协同运行的。
我们要把产品经理角度上的这个功能,拆解为我们代码角度上的具体应该开发的那些功能。
## 3.确定有哪些难点
这里可能有同学疑惑了,我确定这东西干嘛呢。
给大家举一个例子,给你一个需求文档。
你说你一周的时间就能把它开发完,那为什么是一周呢,为什么不是两天,为什么不是两周呢。
其实 和上面的领导汇报你的工作的时候 **都要把自己的工作进行量化**
那么这个功能有哪些难点,我们要克服这个难点,所需要花费的时间,都要有一个大体的量化。
这样才能量化我们自己的工作,**领导其实不知道你的工作是简单 还是困难, 领导只在意最终结果**,所以你需要展现给领导你的工作是有难度的是有挑战的。
而且**这些也是我们年底用来晋升或者评职称的素材**。
如果这些东西你自己都不在乎的话,谁还会帮你在乎呢。
而且**确定了自己的工作难点,把这些难点都记录下来,对以后跳槽也很有帮助**。
面试官最喜欢问的问题,就是:**你做的项目中有哪些难点?以及你是如何克服的**。
所以这一步对自己个人成长来说也是很有重要的。 对于项目组来说也是记录下来,每一个迭代版本有哪些难点,这些难点团队是如何克服的。
这也是项目组往上一级去邀功的资料。
## 4.画架构图
一般来说,大厂项目的架构都是比较复杂的,特别是后端架构。
如果添加一个模块连个文档都没有,连个图也没有,上来就添加的话,后面的人是很难维护的。
而且每个模块和每一个模块之间的依赖关系,如果没有画出一个架构图的话,直接看代码很容易直接就看懵了。
为什么你可以快速开发一个新的模块,也是因为之前团队有人把这个架构图画清楚了,你只需要看一眼这个架构图,就知道你的模块应该添加在哪里。
那么你去添加模块的时候,也应该把这个架构图相应的位置 完善一下。
同时呢,在画架构图的过程中,也增添了自己对整个系统架构的掌握程度。
这个图也会让你确定,你的模块在整个项目中扮演一个什么样的角色。
## 5.定协议
后台模块之间进行通讯需要协议,后台和前端通讯也需要协议。
所以只要有交互,就要确定协议的数据格式。
**定协议要考虑到兼容,要考虑易于维护**
## 6.设计数据结构和算法
其实设计数据结构更多一些,因为我们要选择使用什么容器,什么格式来处理我们的数据。
至于算法的话,就很少我们亲自设计了。
什么快排,二叉树,动态规划,最短路啥的,在实际开发中,都不需要我们自己去写,**直接调包!**
面试造火箭,工作拧螺丝 就体现在这里。
为什么会这样呢? 一个很简单的例子互联网研发讲究其实就是要快例如一个功能2天就要开发完如果算法都要自己去写的话等都写完了花都谢了。
最关键的是,**你实现的算法 极大概率没有现成的算法接口安全性高**。
**开发中要学会才在巨人的肩膀上**
## 7.预估一下容量
特别是后端开发,要估计出 我们自己模块大体需要多大磁盘多大内存多大带宽多少核CPU。
这也是没有做过研发工作的同学经常忽略的,**因为大家好像默认 磁盘、内存、带宽、cpu是无穷的**。
其实我们在设计一个模块的时候,这些都要评估的,不能模块一上线,把机器直接打爆了。
例如 直接把带宽打满了,不仅影响自己的模块功能,还影响了机器上其他模块的运行。
## 8.考虑部署
要考虑如果一台机器挂了(可能是硬件原因),那么我们的模块还能不能正常提供服务。
这就是考虑模块的容灾性,一般都是采用分布式,服务部署在三台机器上,一台如果挂了,还有其他两台提供服务。
还有就是要弹性可伸缩,即我们的模块可不可以直接 部署多台机器来提高承载能力。
如果用户量突然上来了,或者流量突然上来了,可以通过快速部署多台机器来抗住流量。
而不是模块只能在单机上跑,多部署几台就发生各种问题。
**这才能说明是有足够强的风险意识的**
## 9.设计评审
前八的阶段其实都是设计阶段,那么你的设计需要让组里的同学一起来评审一下,看看有没有什么问题。
大家主要也是看看你的模块 会不会给其他模块或者整个系统带来什么问题 以及 设计的是否合理。
## 10.写代码
终于到写代码的阶段了,其实到这时候,是最容易的。
**写代码就是体力活了,不是脑力活了**
## 11.自测
写完代码,我们需要自测,自己的功能会不会有什么问题。
这里可能需要自己造一造数据,跑一跑 看看和预想的是不是一样的。
## 12.联调
自己的模块可能会涉及到其他模块之间的一个交互,或者和前端的一个交互。
所以需要其他同学配合一起来测试。
这里就有很多沟通工作了,因为其他同学可能手头有自己的活,那么就要协调一个时间来一起测试。
这一步也是很费时间的,**其费时关键是要等,要等其他同学有空和你联调或者是别人等你**,而且往往不是联调一次就能解决问题的。
所以 在评估开发时间的时候 也要考虑到联调的时间。
这也是大厂研发效率低的地方,但上百人开发的项目,**这种沟通上消耗也是在所难免的**。
## 13.交给测试
自己的代码,自己测 一般都测不出什么问题,需要交给测试同学来给你测一测。
这里如果测试同学测出问题,你就要判断确实有问题还是 测试方式不对,如果有问题就要修改,再提给测试,反反复复这么几轮,直到测试同学测试没问题了。
**这个过程也是累心的**
## 14.code review
代码合入主干之前,需要 项目组的同学一起来评审一下你的代码。
之前是评审设计,看设计上有没有什么缺失,这次是大家来看看你代码写的怎么样。
例如合入主干会不会有什么问题,代码兼容性做的好不好,接口设计的好不好,甚至字段,函数,变量名,命名合不合理。
都要经过大家的评审,如果有问题就还是要改。
如果没有问题一般 大家会给+2就是通过的意思这样就可以合入主干了。
## 15.合入主干
合入主干为什么会单独列出来呢。
其实合入主干是很重要的,经常是自己的代码没问题,但合入主干之后就有问题了。
一般就是合入主干的时候有冲突,例如你从主干拉出一个分支,另一个同学从主干拉出一个分支,而且两个分支修改了同一个模块,如果另一个同学提前合入主干,你再合入主干的时候就会有代码冲突。
在解决代码冲突的时候 就会修改别人的代码这个过程很容易产生新的bug。
**一般合入主干之后,测试同学还要重新跑一个全量测试,才能放心发布**
如果跑全量测试没有问题的话,才会松一口气(懂的人都懂)。
## 16.发布
最后一步就是发布了。
发布其实就是把主干的代码更新到线上的服务器上。
一些还没有工作的同学,可能不太理解究竟什么是发布。
用大白话来讲,就是把 本地的代码或者某台机器的代码,编译成可执行文件,然后更新到 线上的服务器(一个独立的集群,专门处理线上的流量)并运行起来。
上线是最重要的一步了,也很容易出问题,因为一个大型项目,其上线的过程都非常复杂(要更新上百台机器的集群),而且**要考虑线上新版和旧版本的兼容问题**。
这也是为什么大厂项目都选择深夜上线,**因为深夜在线用户最少,如果出问题,影响的用户会比较少,可以快速修复**。
所以大家经常看到 某大厂程序员深夜上线发布版本之类的。
## 总结
好了,整整讲了十六个步骤!把大厂研发流程中 具体都有哪一步,为什么要这么做,都分析的很清楚了。
不过在大厂也不是所有部门都按照这个流程来的,每个部门都有自己玩法,各个部门也不太统一。
我这里是介绍的是已经比较规范的流程,**但流程越正规,研发效率就越低,想要提高效率,就是简化流程,简化流程,就会提高项目出错的概率**。
**所以这也是一个相互权衡的过程,每一个部门可能根据自己的业务特点,适当简化流程**
好了,讲了这么多,希望对录友们有所启发。

View File

@@ -57,7 +57,7 @@
我做了一下总结如图:
![编程风格](https://file.kamacoder.com/pics/20201119173039835.png)
![编程风格](https://file1.kamacoder.com/i/algo/20201119173039835.png)
### 水平留白(代码空格)
@@ -134,4 +134,4 @@ Google规范是 大括号和 控制语句保持同一行的,我个人也很认
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -19,7 +19,7 @@
如果我们写C++的程序,就要知道栈和堆的概念,程序运行时所需的内存空间分为 固定部分,和可变部分,如下:
![C++内存空间](https://file.kamacoder.com/pics/20210309165950660.png)
![C++内存空间](https://file1.kamacoder.com/i/algo/20210309165950660.png)
固定部分的内存消耗 是不会随着代码运行产生变化的, 可变部分则是会产生变化的
@@ -41,7 +41,7 @@
想要算出自己程序会占用多少内存就一定要了解自己定义的数据类型的大小,如下:
![C++数据类型的大小](https://file.kamacoder.com/pics/20200804193045440.png)
![C++数据类型的大小](https://file1.kamacoder.com/i/algo/20200804193045440.png)
注意图中有两个不一样的地方为什么64位的指针就占用了8个字节而32位的指针占用4个字节呢
@@ -109,7 +109,7 @@ CPU读取内存不是一次读取单个字节而是一块一块的来读取
第一种就是内存对齐的情况,如图:
![内存对齐](https://file.kamacoder.com/pics/20200804193307347.png)
![内存对齐](https://file1.kamacoder.com/i/algo/20200804193307347.png)
一字节的char占用了四个字节空了三个字节的内存地址int数据从地址4开始。
@@ -117,7 +117,7 @@ CPU读取内存不是一次读取单个字节而是一块一块的来读取
第二种是没有内存对齐的情况如图:
![非内存对齐](https://file.kamacoder.com/pics/20200804193353926.png)
![非内存对齐](https://file1.kamacoder.com/i/algo/20200804193353926.png)
char型的数据和int型的数据挨在一起该int数据从地址1开始那么CPU想要读这个数据的话来看看需要几步操作
@@ -145,4 +145,4 @@ char型的数据和int型的数据挨在一起该int数据从地址1开始
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -61,4 +61,4 @@ int main() {
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -1,109 +0,0 @@
# 北京互联网公司总结
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
**个人总结难免有所疏忽,欢迎大家补充,公司好坏没有排名哈!**
如果要在北京找工作这份list可以作为一个大纲寻找自己合适的公司。
## 一线互联网
* 百度(总部)
* 阿里(北京)
* 腾讯(北京)
* 字节跳动(总部)
## 外企
* 微软(北京)微软中国主要就是北京和苏州
* Hulu北京美国的视频网站听说福利待遇超级棒
* Airbnb北京房屋租赁平台
* Grab北京东南亚第一大出行 App
* 印象笔记北京evernote在中国的独立品牌
* FreeWheel北京美国最大的视频广告管理和投放平台
* amazon北京全球最大的电商平台
## 二线互联网
* 美团点评(总部)
* 京东(总部)
* 网易(北京)
* 滴滴出行(总部)
* 新浪(总部)
* 快手(总部)
* 搜狐(总部)
* 搜狗(总部)
* 360总部
## 硬件巨头 (有软件/互联网业务)
* 华为(北京)
* 联想(总部)
* 小米(总部)后序要搬到武汉,互联网业务也是小米重头
## 三线互联网
* 爱奇艺(总部)
* 去哪儿网(总部)
* 知乎(总部)
* 豆瓣(总部)
* 当当网(总部)
* 完美世界(总部)游戏公司
* 昆仑万维(总部)游戏公司
* 58同城总部
* 陌陌(总部)
* 金山软件(北京)包括金山办公软件
* 用友网络科技总部企业服务ERP提供商
* 映客直播(总部)
* 猎豹移动(总部)
* 一点资讯(总部)
* 国双(总部)企业级大数据和人工智能解决方案提供商
## 明星创业公司
可以发现北京一堆在线教育的公司,可能教育要紧盯了政策变化,所以都要在北京吧
* 好未来(总部)在线教育
* 猿辅导(总部)在线教育
* 跟谁学(总部)在线教育
* 作业帮(总部)在线教育
* VIPKID总部在线教育
* 雪球(总部)股市资讯
* 唱吧(总部)
* 每日优鲜(总部)让每个人随时随地享受食物的美好
* 微店(总部)
* 罗辑思维总部得到APP
* 值得买科技(总部)让每一次消费产生幸福感
* 拉勾网(总部)互联网招聘
## AI独角兽公司
* 商汤科技(总部)专注于计算机视觉和深度学习
* 旷视科技(总部)人工智能产品和解决方案公司
* 第四范式(总部)人工智能技术与服务提供商
* 地平线机器人(总部)边缘人工智能芯片的全球领导者
* 寒武纪(总部)全球智能芯片领域的先行者
## 互联网媒体
* 央视网
* 搜房网
* 易车网
* 链家网
* 自如网
* 汽车之家
北京的互联网氛围绝对是最好的(暂不讨论户口和房价问题),大家如果看了[深圳原来有这么多互联网公司,你都知道么?](https://programmercarl.com/前序/深圳互联网公司总结.html)这篇之后,**会发现北京互联网外企和二线互联网公司数量多的优势,在深圳的互联网公司断档比较严重,如果去不了为数不多的一线公司,可选择的余地就非常少了,而北京选择的余地就很多!**
相对来说,深圳的硬件企业更多一些,因为珠三角制造业配套比较完善。而大多数互联网公司其实就是媒体公司,当然要靠近政治文化中心,这也是有原因的。
就酱,我也会陆续整理其他城市的互联网公司,希望对大家有所帮助。
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>

View File

@@ -1,77 +0,0 @@
# 广州互联网公司总结
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
**个人总结难免有所疏忽,欢迎大家补充,公司好坏没有排名哈!**
## 一线互联网
* 微信(总部) 有点难进!
* 字节跳动(广州)
## 二线
* 网易(总部)主要是游戏
## 三线
* 唯品会(总部)
* 欢聚时代总部旗下YY虎牙YY最近被浑水做空不知百度还要不要收购了
* 酷狗音乐(总部)
* UC浏览器总部现在隶属阿里创始人何小鹏现在搞小鹏汽车
* 荔枝FM总部用户可以在手机上开设自己的电台和录制节目
* 映客直播(总部)股票已经跌成渣了
* 爱范儿(总部)
* 三七互娱(总部)游戏公司
* 君海游戏(总部)游戏公司
* 4399游戏总部游戏公司
* 多益网络(总部)游戏公司
## 硬件巨头 (有软件/互联网业务)
* 小鹏汽车(总部)新能源汽车小霸王
## 创业公司
* 妈妈网(总部)母婴行业互联网公司
* 云徙科技(总部)数字商业云服务提供商
* Fordeal总部中东领先跨境电商平台
* Mobvista总部移动数字营销
* 久邦GOMO总部游戏
* 深海游戏(总部)游戏
## 国企
* 中国电信广州研发听说没有996
## 总结
同在广东省,难免不了要和深圳对比,大家如果看了这篇:[深圳原来有这么多互联网公司,你都知道么?](https://programmercarl.com/前序/深圳互联网公司总结.html)就能感受到鲜明的对比了。
广州大厂高端岗位其实比较少,本土只有微信和网易,微信呢毕竟还是腾讯的分部,而网易被很多人认为是杭州企业,其实网易总部在广州。
广州是唯一一个一线城市没有自己本土互联网巨头的城市,所以网易选择在广州扎根还是很正确的,毕竟杭州是阿里的天下,广州也应该扶持一把本土的互联网公司。
虽然对于互联网从业人员来说,广州的岗位要比深圳少很多,**但是广州的房价整体要比深圳低30%左右,而且广州的教育,医疗,公共资源完全碾压深圳**。
教育方面大学广州有两个985四个211深圳这方面就不用说了大家懂得。
基础教育方面深圳的小学初中高中学校数量远远不够用,小孩上学竞争很激烈,我也是经常听同事们说,耳濡目染了。
而医疗上基本深圳看不了的病都要往广州跑,深圳的医院数量也不够用。
在生活节奏上,广州更慢一些,更有生活的气息,而深圳生存下去的气息更浓烈一些。
所以很多在深圳打拼多年的IT从业者选择去广州安家也是有原因的。
但也有很多从广州跑到深圳的,深圳发展的机会更多,而广州教育医疗更丰富,房价不高(相对深圳)。
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>

View File

@@ -1,72 +0,0 @@
# 成都互联网公司总结
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
**排名不分先后,个人总结难免有所疏漏,欢迎补充!**
## 一线互联网
* 腾讯(成都) 游戏,王者荣耀就在成都!
* 阿里(成都)
* 蚂蚁金服(成都)
* 字节跳动(成都)
## 硬件巨头 (有软件/互联网业务)
* 华为(成都)
* OPPO成都
## 二线互联网
* 京东(成都)
* 美团(成都)
* 滴滴(成都)
## 三线互联网
* 完美世界 (成都)游戏
* 聚美优品 (成都)
* 陌陌 (成都)
* 爱奇艺(成都)
## 外企互联网
* NAVER China (成都)搜索引擎公司,主要针对韩国市场
## 创业公司
* tap4fun总部游戏
* 趣乐多(总部)游戏
* 天上友嘉(总部)游戏
* 三七互娱(成都)游戏
* 咕咚(总部)智能运动
* 百词斩(总部)在线教育
* 晓多科技总部AI方向
* 萌想科技(总部)实习僧
* Camera360总部移动影像社区
* 医联 (总部)医疗解决方案提供商
* 小明太极 总部原创漫画文娱内容网站以及相关APP
* 小鸡叫叫(总部)致力于儿童教育的智慧解决方案
## AI独角兽公司
* 科大讯飞(成都)
* 商汤(成都)
## 总结
可以看出成都相对一线城市的互联网氛围确实差了很多。**但是!成都已经是在内陆城市中甚至二线城市中的佼佼者了!**
从公司的情况上也可以看出:**成都互联网行业目前的名片是“游戏”**,腾讯、完美世界等大厂,还有无数小厂都在成都搞游戏,可能成都的天然属性就是娱乐,这里是游戏的沃土吧。
相信大家如果在一些招聘平台上去搜,其实很多公司都在成都,但都是把客服之类的工作安排在成都,而我在列举的时候尽量把研发相关在成都的公司列出来,这样对大家更有帮助。
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>

View File

@@ -38,7 +38,7 @@
同样的同理再看一下快速排序都知道快速排序是O(nlogn)但是当数据已经有序情况下快速排序的时间复杂度是O(n^2) 的,**所以严格从大O的定义来讲快速排序的时间复杂度应该是O(n^2)**。
**但是我们依然说快速排序是O(nlogn)的时间复杂度这个就是业内的一个默认规定这里说的O代表的就是一般情况而不是严格的上界**。如图所示:
![时间复杂度4一般情况下的时间复杂度](https://file.kamacoder.com/pics/20200728185745611-20230310123844306.png)
![时间复杂度4一般情况下的时间复杂度](https://file1.kamacoder.com/i/algo/20200728185745611-20230310123844306.png)
我们主要关心的还是一般情况下的数据形式。
@@ -49,7 +49,7 @@
如下图中可以看出不同算法的时间复杂度在不同数据输入规模下的差异。
![时间复杂度,不同数据规模的差异](https://file.kamacoder.com/pics/20200728191447384-20230310124015324.png)
![时间复杂度,不同数据规模的差异](https://file1.kamacoder.com/i/algo/20200728191447384-20230310124015324.png)
在决定使用哪些算法的时候不是时间复杂越低的越好因为简化后的时间复杂度忽略了常数项等等要考虑数据规模如果数据规模很小甚至可以用O(n^2)的算法比O(n)的更合适(在有常数项的时候)。
@@ -115,7 +115,7 @@ O(2 × n^2 + 10 × n + 1000) < O(3 × n^2),所以说最后省略掉常数项
为什么可以这么做呢如下图所示
![时间复杂度1.png](https://file.kamacoder.com/pics/20200728191447349-20230310124032001.png)
![时间复杂度1.png](https://file1.kamacoder.com/i/algo/20200728191447349-20230310124032001.png)
假如有两个算法的时间复杂度分别是log以2为底n的对数和log以10为底n的对数那么这里如果还记得高中数学的话应该不难理解`以2为底n的对数 = 以2为底10的对数 * 以10为底n的对数`
@@ -164,4 +164,4 @@ O(2 × n^2 + 10 × n + 1000) < O(3 × n^2),所以说最后省略掉常数项
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -1,83 +0,0 @@
# 杭州互联网公司总结
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
**个人总结难免有所疏忽,欢迎大家补充,公司好坏没有排名哈!**
## 一线互联网
* 阿里巴巴(总部)
* 蚂蚁金服(总部)阿里旗下
* 阿里云(总部)阿里旗下
* 网易(杭州) 网易云音乐
* 字节跳动(杭州)抖音分部
## 外企
* ZOOM (杭州研发中心)全球知名云视频会议服务提供商
* infosys杭州印度公司据说工资相对不高
* 思科(杭州)
## 二线互联网
* 滴滴(杭州)
* 快手(杭州)
## 硬件巨头 (有软件/互联网业务)
* 海康威视(总部)安防三巨头
* 浙江大华(总部)安防三巨头
* 杭州宇视(总部) 安防三巨头
* 萤石
* 华为(杭州)
* vivo杭州
* oppo杭州
* 魅族(杭州)
## 三线互联网
* 蘑菇街(总部)女性消费者的电子商务网站
* 有赞(总部)帮助商家进行网上开店、社交营销
* 菜鸟网络(杭州)
* 花瓣网(总部)图片素材领导者
* 兑吧(总部)用户运营服务平台
* 同花顺(总部)网上股票证券交易分析软件
* 51信用卡总部信用卡管理
* 虾米(总部)已被阿里收购
* 曹操出行(总部)
* 口碑网 (总部)
## AI独角兽公司
* 旷视科技(杭州)
* 商汤(杭州)
## 创业公司
* e签宝总部做电子签名
* 婚礼纪(总部)好多结婚的朋友都用
* 大搜车(总部)中国领先的汽车交易服务供应商
* 二更(总部)自媒体
* 丁香园(总部)
## 总结
杭州距离上海非常近,难免不了和上海做对比,上海是金融之都,如果看了[上海有这些互联网公司,你都知道么?](https://programmercarl.com/前序/上海互联网公司总结.html)就会发现上海互联网也是仅次于北京的。
而杭州是阿里的大本营,到处都有阿里的影子,虽然有网易在,但是也基本是盖过去了,很多中小公司也都是阿里某某高管出来创业的。
杭州的阿里带动了杭州的电子商务领域热度非常高,如果你想做电商想做直播带货想做互联网营销,杭州都是圣地!
如果要是写代码的话每年各种节日促销加班996应该是常态电商公司基本都是这样当然如果赶上一个好领导的话回报也是很丰厚的。
「代码随想录」一直都是干活满满,值得介绍给每一位学习算法的同学!
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>

View File

@@ -1,79 +0,0 @@
# 深圳互联网公司总结
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
**个人总结难免有所疏忽,欢迎大家补充,公司好坏没有排名哈!**
## 一线互联网
* 腾讯(总部深圳)
* 百度(深圳)
* 阿里(深圳)
* 字节跳动(深圳)
## 硬件巨头 (有软件/互联网业务)
* 华为(总部深圳)
* 中兴(总部深圳)
* 海能达(总部深圳)
* oppo总部深圳
* vivo总部深圳
* 深信服(总部深圳)
* 大疆(总部深圳,无人机巨头)
* 一加手机(总部深圳)
* 柔宇科技(最近口碑急转直下)
## 二线大厂
* 快手(深圳)
* 京东(深圳)
* 顺丰(总部深圳)
## 三线大厂
* 富途证券2020年成功赴美上市主要经营港股美股
* 微众银行(总部深圳)
* 招银科技(总部深圳)
* 平安系列(平安科技、平安寿险、平安产险、平安金融、平安好医生等)
* Shopee21年有裁员风波
* 有赞(深圳)
* 迅雷(总部深圳)
* 金蝶(总部深圳)
* 随手记(总部深圳)
## AI独角兽公司
* 商汤科技(人工智能领域的独角兽)
* 追一科技一家企业级智能服务AI公司
* 超多维科技 计算机视觉、裸眼3D
* 优必选科技 (智能机器人、人脸识别)
## 明星创业公司
* 丰巢科技(让生活更简单)
* 人人都是产品经理(全球领先的产品经理和运营人 学习、交流、分享平台)
* 大丰收(综合农业互联网服务平台)
* 小鹅通(专注新教育的技术服务商)
* 货拉拉(拉货就找货拉拉)
* 编程猫(少儿编程教育头部企业)
* HelloTalk全球最大的语言学习社交社区
* 大宇无限( 拥有SnapTube, Lark Player 等多款广受海外新兴市场用户欢迎的产品)
* 知识星球(深圳大成天下公司出品)
* XMind隶属深圳市爱思软件技术有限公司思维导图软件
* 小赢科技(以技术重塑人类的金融体验)
## 其他行业(有软件/互联网业务)
* 三大电信运营商:中国移动、中国电信、中国联通
* 房产企业:恒大(暴雷)、万科
* 中信深圳
* 广发证券,深交所
* 珍爱网(珍爱网是国内知名的婚恋服务网站之一)
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>

View File

@@ -130,4 +130,4 @@ Markdown支持部分html例如这样
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -103,13 +103,13 @@ Carl校招社招都拿过大厂的offer同时也看过很多应聘者的简
最后福利,把我的简历模板贡献出来!如下图所示。
![简历模板](https://file.kamacoder.com/pics/20200803175538158.png)
![简历模板](https://file1.kamacoder.com/i/algo/20200803175538158.png)
这里是简历模板中Markdown的代码[https://github.com/youngyangyang04/Markdown-Resume-Template](https://github.com/youngyangyang04/Markdown-Resume-Template) 可以fork到自己Github仓库上按照这个模板来修改自己的简历。
**Word版本的简历添加如下企业微信通过之后就会发你word版本**
<div align="center"><img src="https://file.kamacoder.com/pics/20240328164645.png" data-img="1" width="200" height="200"></img></div>
<div align="center"><img src="https://file1.kamacoder.com/i/algo/20240328164645.png" data-img="1" width="200" height="200"></img></div>
如果已经有我的企业微信,直接回复:简历模板,就可以了。
@@ -119,4 +119,4 @@ Carl校招社招都拿过大厂的offer同时也看过很多应聘者的简
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -65,4 +65,4 @@ for (int i = 0; i < n; i++) {
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -8,7 +8,7 @@
## 超时是怎么回事
![程序超时](https://file.kamacoder.com/pics/20200729112716117-20230310124308704.png)
![程序超时](https://file1.kamacoder.com/i/algo/20200729112716117-20230310124308704.png)
大家在leetcode上练习算法的时候应该都遇到过一种错误是“超时”。
@@ -124,11 +124,11 @@ int main() {
来看一下运行的效果,如下图:
![程序超时2](https://file.kamacoder.com/pics/20200729200018460-20230310124315093.png)
![程序超时2](https://file1.kamacoder.com/i/algo/20200729200018460-20230310124315093.png)
O(n)的算法1s内大概计算机可以运行 5 * (10^8)次计算,可以推测一下 $O(n^2)$ 的算法应该1s可以处理的数量级的规模是 5 * (10^8)开根号,实验数据如下。
![程序超时3](https://file.kamacoder.com/pics/2020072919590970-20230310124318532.png)
![程序超时3](https://file1.kamacoder.com/i/algo/2020072919590970-20230310124318532.png)
O(n^2)的算法1s内大概计算机可以运行 22500次计算验证了刚刚的推测。
@@ -136,7 +136,7 @@ O(n^2)的算法1s内大概计算机可以运行 22500次计算验证了刚
理论上应该是比 $O(n)$ 少一个数量级,因为 $\log n$ 的复杂度 其实是很快,看一下实验数据。
![程序超时4](https://file.kamacoder.com/pics/20200729195729407-20230310124322232.png)
![程序超时4](https://file1.kamacoder.com/i/algo/20200729195729407-20230310124322232.png)
$O(n\log n)$ 的算法1s内大概计算机可以运行 2 * (10^7)次计算,符合预期。
@@ -144,7 +144,7 @@ $O(n\log n)$ 的算法1s内大概计算机可以运行 2 * (10^7)次计算,
**整体测试数据整理如下:**
![程序超时1](https://file.kamacoder.com/pics/20201208231559175-20230310124325152.png)
![程序超时1](https://file1.kamacoder.com/i/algo/20201208231559175-20230310124325152.png)
至于 $O(\log n)$ 和 $O(n^3)$ 等等这些时间复杂度在1s内可以处理的多大的数据规模大家可以自己写一写代码去测一下了。
@@ -278,4 +278,4 @@ public class TimeComplexity {
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -29,7 +29,7 @@ int fibonacci(int i) {
可以看出上面的代码每次递归都是O(1)的操作。再来看递归了多少次这里将i为5作为输入的递归过程 抽象成一棵递归树,如图:
![递归空间复杂度分析](https://file.kamacoder.com/pics/20210305093200104.png)
![递归空间复杂度分析](https://file1.kamacoder.com/i/algo/20210305093200104.png)
从图中可以看出f(5)是由f(4)和f(3)相加而来那么f(4)是由f(3)和f(2)相加而来 以此类推。
@@ -196,7 +196,7 @@ int main()
在看递归的深度是多少呢?如图所示:
![递归空间复杂度分析](https://file.kamacoder.com/pics/20210305094749554.png)
![递归空间复杂度分析](https://file1.kamacoder.com/i/algo/20210305094749554.png)
递归第n个斐波那契数的话递归调用栈的深度就是n。
@@ -214,7 +214,7 @@ int fibonacci(int i) {
最后对各种求斐波那契数列方法的性能做一下分析,如题:
![递归的空间复杂度分析](https://file.kamacoder.com/pics/20210305095227356.png)
![递归的空间复杂度分析](https://file1.kamacoder.com/i/algo/20210305095227356.png)
可以看出,求斐波那契数的时候,使用递归算法并不一定是在性能上是最优的,但递归确实简化的代码层面的复杂度。
@@ -264,4 +264,4 @@ int binary_search( int arr[], int l, int r, int x) {
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>

View File

@@ -69,7 +69,7 @@ int function3(int x, int n) {
我们来分析一下首先看递归了多少次呢可以把递归抽象出一棵满二叉树。刚刚同学写的这个算法可以用一棵满二叉树来表示为了方便表示选择n为偶数16如图
![递归算法的时间复杂度](https://file.kamacoder.com/pics/20201209193909426.png)
![递归算法的时间复杂度](https://file1.kamacoder.com/i/algo/20201209193909426.png)
当前这棵二叉树就是求x的n次方n为16的情况n为16的时候进行了多少次乘法运算呢
@@ -79,7 +79,7 @@ int function3(int x, int n) {
这么如果是求x的n次方这个递归树有多少个节点呢如下图所示(m为深度从0开始)
![递归求时间复杂度](https://file.kamacoder.com/pics/20200728195531892.png)
![递归求时间复杂度](https://file1.kamacoder.com/i/algo/20200728195531892.png)
**时间复杂度忽略掉常数项`-1`之后这个递归算法的时间复杂度依然是O(n)**。对你没看错依然是O(n)的时间复杂度!
@@ -140,4 +140,4 @@ int function3(int x, int n) {
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
<div align="center"><img src='https://file1.kamacoder.com/i/algo/01二维码.jpg' width=450> </img></div>