可爱小蛇 - 学习笔记
type: channel
link: https://blog.cutesnake.top/index.php/category/学习笔记/
items: 2023C++底层人士面试总集
items: PAT2023夏季甲级简略c++题解
items: vim命令速查
items: 2023还是不会的数据结构与算法题集结
items: 力扣每日一题 April, 2022
items: CMU15-213 Shell lab
items: 【持续更新】PAT甲级Advanced Level
items: 高分子化学
items: CMU15-213 cache lab
items: 化工传质与分离过程

2023C++底层人士面试总集
type: item
date: 2023-07-03T21:23:00+08:00
description: 水平很次，成绩很差，没有拿到毕业证（差一门课学分要明年重修成功才能拿到），非本专业转码，无项目，找工作也晚，属于debuff拉满的底层人士。可能唯一好点就是学校牌子在这边比较好用（说起这点真是汗颜，高中的努力居然有这么长远的帮助，要说现在我感觉我根本不配这个牌子）。所以主要面的小厂。卓漫科技 2023.6.29第一次线下面试，机会由hr主动联系提供，面试岗位是算法工程师。我提前了20分钟到，到了以后给了份个人信息表和一些模型训练相关的问题（全都不会），这时已经感觉很不妙了。等了40分钟面试官才出现。由一个3,40岁天大的学长和hr共同面试，由于我人工智能一窍不通，很明显气氛很尴尬。学长看了我简历半天，问了我几个问题：1，c和c++有什么区别？答：c++是c的超集，c++好像还有面向对象特性，其他不知道。2，c和c++有哪些传值方式，有什么区别？答：不会。复盘：值传递，指针传递，引用传递。c没有引用传递。3，这个是c里面最基础的东西啊……这样吧，我再问问……（考虑一会）算了不问了，好像不太幸运没考到你会的啊。那讲讲你的故事吧，你擅长什么？答：（支吾）自学英文课程的计算机基础课，考了PAT，主要考试内容是数据结构。4，你讲那么多我可以概括说英语比较好是吧。答：嗯，大概是的……5，你学过的计算机专业课主要学了什么？答：数据结构和算法，链表啊，二叉树啊，迪杰斯特拉算法这些。6，介绍一下链表和跳表吧。答：链表就是一个个节点连接在一起，跳表不会。7，（沉默了一会）对我们有什么问题。问：您前面问的c和c++有什么区别……答：（打断）这个我们今天就不讨论技术了吧，主要是你对我们公司有没有什么问题……答：没有……8，你应该参加面试比较少吧，我给你个建议就是你要好好做好准备再来面试，至少你引导面试官问的东西你得会，不要这样挥霍机会了。9，hr问了一些问题，略。10，那就到这里吧，有消息我们会进一步通知你的。（结束了，20分钟不到）总结：面错岗位了，很难受。上来先给份人工智能的题，什么对什么参数有什么看法，有什么心得之类的，直接交白卷。面试官上来三板斧把我干懵了，我真的对c是一点也不会。传值方式我三种都用了无数遍了，但是我不知道它们具体叫什么……引导也有问题，数据结构与算法里面我比较自信的是dfs这块，链表跳表完全没复习。面试前重点突击c++语言特性继承多态封装一点没问。总的来说还是面错岗位了，气馁了一晚上。宇视科技 2023.6.30公司挺大挺正式的，做的是安保方面，有特别的保密要求背包不能带进办公区。应聘岗：前端一部嵌入式开发一面面试官三十岁左右，给我印象挺好的，给了份卷子，有几道题：1，写出下列数据类型占几个字节：char, int, short，如果在一个struct里，这个struct占几个字节.答：1,4,2,7复盘：7不对，应该是122，函数传值题3，简介strncpy和memcpy（不会）4，简单指针题做完以后，面试官说大概都是对的（指出了第一题7的错误，然后我想起来应该是最长端对齐）。做完以后问了点项目，因为我自己也没吃透我简历上的项目，总之就是一问三不知。唉……问题有：1.内存泄漏了解过吗。答：指针管理不当会内存泄漏复盘：内存泄漏（Memory Leak）是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放，造成系统内存的浪费，导致程序运行速度减慢甚至系统崩溃等严重后果。2.Linux有哪些操作？怎么删除文件夹？怎么编辑文档。答：ls列出文档，rm -rf，编辑我一般用vim。3.介绍一下你简历里面搭建的服务器，有什么功能。答：（支吾）利用socket，实现一个前端输入命令后端作简单反应的功能。4.介绍一下socket编程服务端和客户端有什么操作。复盘：然后让写个排序吧，随便哪种都行。很意外要写这个，很生疏，写了半天写了个冒泡，因为白纸写code又紧张又不习惯还把判断给漏了，最终也不知道代码写完有没有什么问题。面试官倒是也没说啥。很怪，这种题我平时正眼都不会看一眼的，居然卡得我这么狼狈。5.有什么问题吗？问：我看岗位上是前端一部，又是嵌入式开发，这个和前端有什么关系？答：我们做安保的。比如说监控摄像头，控制它转动，那部分代码就是前端负责的。问：网络编程在工作中有什么应用？答：摄像头数据流向后端传播要用到。二面面试官很拽。（问了一些学业方面的问题，以及pat是什么）1.写下反转链表。力扣有写过吧。答：力扣写过，原题不记得写没写过了。（写了很久，快写完时被打断了，说没时间）2.先序遍历是什么，写一下。（很快写完）3.给int a,b;把a的第二个字节赋值给b的第一个字节。b=(a>>8) & (0xFF)（0xFF那里原来写的是511，面试官说我看不懂你换种写法，然后答错了两遍才答对，忘记F是4个bit了）三面hr面，问了些…

PAT2023夏季甲级简略c++题解
type: item
date: 2023-06-12T17:04:00+08:00
description: ​A-1 Trap分数 20A robot is designed to move on a map from South toward North. When some obstacle is encountered, the robot can only turn toward West and moves until it can turn toward North and continue.Given a squared map with n×n blocks, a robot can start from any position below the bottom line (South) and its target is to reach the top line (North). (By the way, kindly remind you that the left-hand-side of the map is West and the right-hand-side is East.)If some obstacles are placed in the map, the robot might get trapped if it starts from certain positions and can never reach the North line. For example, in the situation given by the following figure, the robot will be trapped if it starts from either position 7 or 8.Your job is to point out those starting positions which will get the robot trapped.Note: it is assumed that a robot can move out of the map boundary, and all the blocks around the map are open, without any obstacle. Hence if the robot starts from any position out of the West or East boundary, it can certainly reach North without any problem. Therefore we only have to consider the positions between the West and East boundaries (e.g. the positions from 1 to 10 below the South line in the above figure). Besides, as long as the robot can reach the North line, it is considered successful even of it ends up at out of the boundary (e.g. the robot will have to move out of the map if starts from either the positions 1 or 2, but it can still reach the North line).Input Specification:Each input file contains one test case. Each case starts from a positive integer n (≤100) in a line, which is the size of the map. Then n lines follow, each contains n characters, which are either 0 for an open block, or 1 for a block with obstacle. The first line corresponds to the North boundary and the last line the South.Output Specification:Output in a line all the starting positions which can get the robot trapped, in increasing order. The positions are indexed from West to Ea…

vim命令速查
type: item
date: 2023-01-20T11:22:00+08:00
description: 速查常用vim命令https://vimhelp.org/:w save:x :wq save and quit:q! quit not save/string find "string", use n/N to find next/previous one:{作用范围}s/{目标}/{替换}/{替换的标志} 作用范围：%所有行第一次，'<,'>可视范围 替换标志：i 大小写不敏感，I 大小写敏感，g全局 h左 j下 k上 l右 yycopy line p paste u undo ctrl + r redo

2023还是不会的数据结构与算法题集结
type: item
date: 2023-01-06T10:51:00+08:00
description: 我的力扣主页：https://leetcode.cn/u/cutesnake/我的PAT仓库：https://github.com/suchacutesnake/pat2023.1.1然而竞赛积分还是掉了1分……做太慢也不行吗……2023.1.6花了很多时间，还是好菜，难受~~PAT 1064 Complete Binary Search Treehttps://pintia.cn/problem-sets/994805342720868352/exam/problems/994805407749357568难点：1.对于以层序遍历数组表示的树，如何进行各种遍历。2.对BST，中序（左根右）遍历结果是递增的。3.对CBST的某一节点i，其左右子树分别表示为2i，2i+1。Leetcode 1803. Count Pairs With XOR in a Range (hard)https://leetcode.cn/problems/count-pairs-with-xor-in-a-range/字典树。答案都看不懂，可以竞争我遇到过最难的力扣题。倒不是不明白字典树这个数据结构，就是想不明白为什么要用字典树？？？有没有人来教教我啊~~~2023.1.9Leetcode 6306. Time to Cross a Bridge (hard)https://leetcode.cn/problems/time-to-cross-a-bridge/周赛327场的hard，比起力扣感觉更像PAT的题目，涉及很繁琐的数据结构设计。周赛做完T3只剩10分钟了，时间不够就没做。这种复杂的模拟题对大家来说原来都很困难，头一次见到周赛接近半小时大佬们才全通的。2023.1.11Leetcode753. Cracking the Safe(hard)https://leetcode.cn/problems/cracking-the-safe/初见欧拉回路题，只能看答案。算法看明白了，但是代码实现是怎么做到的看不明白……2023.1.14Leetcode 1819. Number of Different Subsequences GCDs (H)https://leetcode.cn/problems/number-of-different-subsequences-gcds/比较有趣的暴力枚举，杂了一点数学2023.1.16题外话，前几天折腾xray，第一次GitHub上交了pull request，秒merge了，还挺兴奋的。2023.1.18Finding MK Average (H)https://leetcode.cn/problems/finding-mk-average/很多讨论的有序集合+队列题， 奋斗数小时后tle，耻辱看答案。不是自己写的代码真的不想cv提交啊，这每日一题打卡不打也罢！明明就是不会嘛，不会的题却显示通过给一种自欺欺人的感觉……评论区acm爷普遍用的树状数组，我什么时候能学学这个数据结构啊……2023.3.23https://leetcode.cn/problems/word-ladder-ii/solution/dan-ci-jie-long-ii-by-leetcode-solution/要做吐了，错了一遍又一遍，到后面几乎和题解一模一样的写法就差cv了，还是超时。时间复杂度肯定是一样的，卡剪枝了，好难受啊真的好难受。错误的代码先贴着。class Solution { public: void backtrack(unordered_map<string, unordered_set<string>>& from, vector<vector<string>>& res, vector<string>& cur, string beginWord) { for (auto& next : from[cur.back()]) { cur.emplace_back(next); if (next == beginWord) { res.emplace_back(cur); reverse(res.back().begin(), res.back().end()); } backtrack(from, res, cur, beginWord); cur.pop_back(); } } vector<vector<string>> findLadders(string beginWord, string endWord, vector<string>& wordList) { unordered_set<string> dict({wordList.begin(), wordList.end()}); unordered…

力扣每日一题 April, 2022
type: item
date: 2022-04-20T20:07:00+08:00
description: 我的力扣主页：https://leetcode-cn.com/u/cutesnake/4.20388中等https://leetcode-cn.com/problems/longest-absolute-file-path/乍一看简单，仔细一想不会做。本来想用遍历，看了答案知道用哈希表，但还是太难办，写了一个小时，wa一次，有点理解屎山是如何堆成的了……class Solution { public: int lengthLongestPath(string input) { int res = 0, curLen = 0, subCnt = 0, n = input.size(); bool isFile = 0; unordered_map<int, int> subNum; for (int i = 0; i < n; ++i) { char& ch = input[i]; if (ch == '\n') { isFile = 0; subNum[subCnt] = curLen; subCnt = 0; continue; } if (ch == '\t') { ++subCnt; } else { if (i && (input[i-1] == '\t' || (input[i-1] == '\n' && subCnt == 0))) curLen = subNum[subCnt-1]; if (ch == '.') isFile = 1; ++curLen; if (isFile) res = max(res, curLen + subCnt); } } return res; } };

CMU15-213 Shell lab
type: item
date: 2021-11-20T20:19:00+08:00
description: 2021-11-20 20:18:09 星期六发现我真的是不会c语言……就连最简单的字符串比较都不会，还要上网去查才知道有strcmp这个函数……在对各种c库函数一无所知的情况下，感觉要实现些什么真的举步维艰啊……不过，也真的觉得这次的lab不是很难（可能经过了pat三十多道题的洗礼有进步了），就愈发想要自己独立完成。然而，越是有这样的心，就越在简单的地方（指知识性的地方，了解过就几行搞定，没了解过就卡住的地方）就进行不下去了，到底还是水平太次了orz2021-11-20 22:31:11 星期六看了一下博客，完全是一点也不懂……太硬了，英文课本也看不懂，什么时候才能学下来啊……2021-11-22 20:49:51 星期一一个坑：需要到http://csapp.cs.cmu.edu/3e/code.html 把csapp.h的代码复制然后include进来。开始有点明白了。按着16个trace一步一步走就行。前3个trace照抄课堂上课件的代码即可。![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-22 at 8.48.55 PM.jpg)到trace05卡住了。理论上./myspin 2 & 和./myspin 3 &所分配到的jid应该是1和2，但我这里是2和4。2021-11-26 15:41:05 星期五是2和4的原因在于没有waitfg。把waitfg函数完成即可。2021-11-26 13:20:07 星期五错误：![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-26 at 1.50.14 PM.jpg)Makefile里加上CFLAGS = -Wall -O2 -pthread#include "csapp.h"然后把tsh.c里重复定义的代码都注释掉。test07：信号掩蔽exit总是会把主函数return掉，想要杀掉进程而不退出tsh，用kill。csapp.c里面的Kill支持不了-pid参数，只能用kill。在sigint_handler里用了exit(0)的话，会有以下结果（上面是我的输出，下面是参考输出）：![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-26 at 3.46.22 PM.jpg)如果不掩蔽，则前后台的process都会terminate掉。2021-11-27 12:45:43 星期六![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-27 at 12.46.59 PM.jpg)对test08的jobs命令显示不了Stopped的进程：1，在waitfg里面的waitpid用上WUNTRACED这个option，使得一旦有子进程terminate或者stop都会被watipid捕捉到，再通过WIFSTOPPED(status)（图中用的WIFEXITED，会过不了test07）进行判断，把stopped掉的进程状态设置为ST。![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-27 at 12.53.39 PM.jpg)2，对应handout PDF的Hints最后一条，在合适的位置加上setpgid(0, 0)，使得后台的进程一定拥有一个独立的进程组。2022-01-23 19:40:50 星期日放假了十几天了，捡回来接着做。发现之前直到test09的输出结果都是没问题的，但是进程回收一块完全是一塌糊涂，根本没做，导致所有进程就算结束了也还会在jobs命令下有所显示。还得再看看书。

【持续更新】PAT甲级Advanced Level
type: item
date: 2021-11-16T16:45:00+08:00
description: 题目集网址：https://pintia.cn/problem-sets/994805342720868352/problems/type/7我的代码网址，附尽量详细的英文注释：https://github.com/suchacutesnake/pat2021-11-16 16:44:21 星期二这两天饭也吃不香，觉也睡不好，都是因为这道傻逼题目（指1026），也不讲讲清楚，就tm纯靠猜是吧![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-16 at 4.40.48 PM.jpg)做一题8小时，真心累，这题目多少有点大病。我还以为我代码有问题，结果网上一搜才知道全是题目没讲清楚的地方case不过，我真的是醉了，我写的代码从一开始就一点问题都没有……这考的是编程能力还是猜出题人意思的能力？2021-11-21 21:28:59 星期日今天打算19:30~21:30做个pat甲级的模拟考，正好1035~1038的分值加起来是100.结果我93分钟就全ac了，前3题每题都刚好只用13分钟。太兴奋了，信心一下就来了，我直接膨胀起来了。今早力扣周赛只做出两题的阴霾一扫而光，我甚至开始考虑是否在今年12月9日前报名12月19日的pat甲级测试了。2021-11-23 19:09:13 星期二今天模拟了2020春季的PAT真题，得分83/100，排名396/1588。还挺失望的。比较有趣的是我模拟考时正好赶上服务器迁移，看不到实时排名，最后钱就退回给我了，相当于我白嫖了一次考试。![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-23 at 7.10.56 PM.jpg)本来在用Windows考试的，结果vs2019一个更新以后直接开机五分钟必卡崩，只好切回Mac，这里大概浪费了半个小时。真气死我了。这里心态就已经不太好了。或许开考前认真一点做好准备会有更好的结果吧。这次考试一三题ac了，第二题tle，第四题两个tle一个wa。考试过程中我以为会有更高端的算法，就想到别处去了。结果看了看别人的解析，我的想法是没问题，但第二题是没用数组存路径导致速度慢了，第四题则至今不明白哪里有问题。两个题都是模拟，我恨模拟！上周力扣周赛也是第二题模拟卡了我50分钟，直接后面就没时间思考了。感觉今年冬季PAT可以一战，高分应该没问题，满分就看运气了。2021-11-25 20:11:19 星期四昨晚做了套真题，才47分，排名985/2701，直接锐气都没了。今晚又花了一小时做了https://pintia.cn/problem-sets/1263308065769611264 PAT 520 钻石争霸赛真题（2020-05-20），结果得分55/120，排名1351/7951，直接自信给干崩溃了。。。其实要说我真不会吗，倒不是，问题就在于很难一次写出bug-free的代码，浪费时间太多了。也许以后做题要开始限时了，把熟练度提上来。我还是很缺练习，自己之前对自己的定位或许过高了。

高分子化学
type: item
date: 2021-10-08T09:32:00+08:00
description: 不知道为什么这篇文章的图片全部显示不出来了……2022.4.20更新：换阿里云OSS以后全都没问题了。高分子化学也低分飘过，及格万岁！笔记懒得补了。1 绪论2 缩聚与逐步聚合![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-09 at 7.05.34 PM.jpg)![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-09 at 7.05.58 PM.jpg)3 自由基聚合![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-09 at 7.03.05 PM.jpg)4 自由基共聚合![](https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-09 at 7.04.55 PM.jpg)

CMU15-213 cache lab
type: item
date: 2021-09-23T22:32:00+08:00
description: part A2021-09-23 22:18:42 星期四#include <stdio.h> //printf() #include <time.h> //clock_t #include <stdlib.h> //atoi() #include <getopt.h> //getopt() #include "cachelab.h" typedef struct { unsigned tag; /* tag bits per line */ _Bool valid; /* 1 valid bit per line */ clock_t stamp; /* time stamp, to implement LRU algorithm */ }cache_line; cache_line** init_cache(int s, int E) { /* cache size = S(=2^s sets per cache) * E(lines per set) * B(=2^b bytes per block) * we use cache_line_size here instead of B */ int sets_cnt = 1<<s, cache_line_size = sizeof(cache_line); /* cache_line** cache is a two dimensional array, and cache[i] means * the ith set in the cache. */ cache_line** cache = (cache_line**) malloc(cache_line_size * sets_cnt); for(int i = 0; i < sets_cnt; ++i) { int set_size = cache_line_size * E; //initial the ith set cache[i] = (cache_line*) malloc(set_size); //the for loop can be replaced by //memset(cache[i], 0, set_size) //#include <string.h> for(int j = 0; j < E; ++j) { cache[i][j].tag = 0; cache[i][j].valid = 0; cache[i][j].stamp = 0; } } return cache; } void free_cache(cache_line** cache, int s) { int sets_cnt = 1<<s; for(int i = 0; i < sets_cnt; ++i) { free(cache[i]); } free(cache); } _Bool set_insert(cache_line* set, unsigned long tag, int E) { int old_stamp_index = 0; for(int i = 0; i < E; ++i) { if(set[i].stamp < set[old_stamp_index].stamp) old_stamp_index = i; if(!set[i].valid) { set[i].valid = 1; set[i].tag = tag; set[i].stamp = clock(); return 0; } } //all lines valid, evict the Least-Recent-Used set[old_stamp_index].tag = tag; set[old_stamp_index].stamp = clock(); return 1; } //hit=1, miss=0 _Bool set_inspect(cache_line* set, unsigned tag, int E) { for(int i = 0; i < E; ++i) { if(set[i].valid && set[i].tag == tag) { //hit, renew time stamp set[i].stamp = clock(); return 1; } } //miss return 0; } void cache_simulate(cache_line** cache, char type, unsigned address, int bytes, int s, int E, int b, int v, int* hits, int* misses, int* evictions) { //addr…

化工传质与分离过程
type: item
date: 2021-09-22T19:37:00+08:00
description: 1 传质过程基础费克第一定律，传质微分方程（略），做题：求摩尔通量，摩尔平均速度，质量通量，扩散通量典型题其中，质量衡算方程相等两边分别是从左向右积分和从管壁向中心积分。2 气体吸收气膜阻力/总阻力=(1/KG)/(1/kG)2021-10-22 15:40:27 星期五2021-10-23 20:00:04 星期六