本文为2020年07月09日 本文为覃超关于模拟面试的线上直播课的听课笔记。

正确对待面试

  • 作为和未来同事的一次合作
  • 并肩作战,解决问题
  • 减少压力(一定要积极的沟通和表达)

所以一定要积极的沟通和表达

注意:题目的熟练程度

技术面试

  • 项目经验:要点,深度
  • 基础知识:语言、数据库、并发、框架知识等
  • 算法和数据结构。(重点)60%~70%

面试题目

线程和进程

线程:没有独立的地址空间,与进程以及其他线程共享一个地址空间,它是系统任务调度的最小单元(轻量级进程);进程:有独立的地址空间。

多进程场景:监控进程系统(启动服务,然后监控服务是否退出,把服务重新启动);多线程的场景:高并发(nginx、tars框架)。

并发和并行:

并发:两个或者两个以上的事件在同一时间段内发生(是指微观的时间段,非常短,几乎感觉不出时间发生的时间差。)

并行:指两个或者两个以上的事件在同一时刻发生。并行意味着应用程序拆分成更小的子任务,这些任务可以并行处理,例如在多个CPU在同一时间。

同步和异步:

同步:下一个任务依赖上一个任务结束之后才能进行。

异步:等待某件事情的过程中继续做自己的事,不需要等待这一事件完成后再工作。

线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等 待另一线程的完成,从而可以让主线程干其它的事情。

并发和并行其实是异步线程实现的两种形式。并行其实是真正的异步,多核 CPU可以同时开启多条线程供多个任务同时执行,互不干扰。但是并发就不一 样了,是一个伪异步。在单核CUP中只能有一条线程,但是又想执行多个任务。 这个时候,只能在一条线程上不停的切换任务。

算法题目

题目一:20.Valid Parentheses

class Solution {public:bool isValid(string s) {if (s.empty()) {return true;}std::stack<char> stack;for (char i : s) {if (i == '}' || i == ']' || i == ')') {// 如果栈已经空了,放入反括号,一定不合法。// 另外,如果这里不做判断,下面的stack.top()将访问未知地址,导致异常if (stack.empty()) {return false;}if ( (i == '}' && stack.top() == '{')|| (i == ')' && stack.top() == '(')|| (i == ']' && stack.top() == '[')) {stack.pop();} else {return false;}} else {stack.push(i);}}return stack.empty();}
};

AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x000000383e02 bp 0x7ffe462fb990 sp 0x7ffe462fb880 T0)

特别注意:如果stack为空,则stack.top()将访问未知的地址,会引发异常(it is meaningless to have references to the top element when the stack is empty)。因此,进行stack.top()操作之前,必须确保stack不为空。

题目二:70.Climbing Stairs

class Solution {public:int climbStairs(int n) {if (n < 3) {return n;}int f1 = 1;int f2 = 2;int f3 = 3;for (int i = 3; i <= n; i++) {f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;}
};

这道题特别经典,变形很多。一定要重视。

  • 如果n种走法?
  • 如果相邻走法不能重复?
  • 如何打印出所有走法?

题目三:50.Pow(x, n)

解法1:暴力求解

class Solution1 {public:double myPow(double x, int n) {long long N = n; // 变成长整形,处理负数越界的常用方法if (N < 0) {N = -N;x = 1 / x;}double res = 1.0;for (int i = 0; i < N; i++) {res *= x;}return res;}
};

Time Limit Exceeded,无法AC

Line 21: Char 35: runtime error: negation of -2147483648 cannot be represented in type ‘int’; cast to an unsigned type to negate this value to itself (solution.cpp)

注意:int类型的范围n∈[−2147483648,2147483647],如果n=−2147483648,执行-n就会出现越界,所以转为long来操作就安全了。将 x 存入 long 变量 y ,后面用 y 操作即可。

解法2:快速幂-递归+分治法(自顶向下)

  • 关键字:比O(n)更好的解法
  • 模式识别:分治法实现计算量减半
  • 时间复杂度:O(logn)
  • 空间复杂度:O(logn) (利用递归,存在递归栈)
class Solution2 {public:double myPowHelper(double x, long long n) {if (n == 0) {return 1;}double half = myPowHelper(x, n/2);if (n % 2 != 0) {return half * half * x;} else {return half * half;}}double myPow(double x, int n) {if (n == 0 || x == 1) {return 1;}long long N = n;if (n < 0) {return 1 / myPowHelper(x, -N);} else {return myPowHelper(x, N);}}
};

改写为位运算

class Solution2 {public:double myPowHelper(double x, long long n) {if (n == 0) {return 1;}double half = myPowHelper(x, n >> 1);if (n & 1 != 0) {return half * half * x;} else {return half * half;}}double myPow(double x, int n) {if (n == 0 || x == 1) {return 1;}long long N = n;if (n < 0) {return 1 / myPowHelper(x, -N);} else {return myPowHelper(x, N);}}
};

解法3:快速幂-循环递推(自底向上)

class Solution {public:double myPow(double x, int n) {long N = n;if (N < 0) {N = -N;} double res = 1.0;for (long i = N; i != 0; i >>= 1) {if (i & 1) {res *= x; // 不同二进制位的权重进行累加(当且仅当1才可累加)} x *= x; // 对应二进制位的权重(对于二进制而言,高位是相邻低位的2倍)}return n > 0 ? res : 1/res;}
};

改写为while循环

class Solution {public:double myPow(double x, int n) {long N = n;if (N < 0) {N = -N;} double res = 1.0;while (N) {if (N & 1) {res *= x;} x *= x;N >>= 1;}return n > 0 ? res : 1/res;}
};

题目四:112. Path Sum

class Solution {public:bool hasPathSum(TreeNode* root, int sum) {if (!root) {return false;}// recursion terminatorif (!root->left && !root->right) {return sum == root->val;}return hasPathSum(root->left, sum - root->val) ||hasPathSum(root->right, sum - root->val);}
};

变形一:不需要到叶子节点,可以在任意节点结束。

class SolutionVariation1 {public:bool hasPathSum(TreeNode* root, int sum) {if (!root) {return false;}// recursion terminatorif (sum == root->val) {return true;}// return sum == root->val;return hasPathSum(root->left, sum - root->val) ||hasPathSum(root->right, sum - root->val);}
};

变形二:不需要到叶子节点,可以在任意节点结束。并且也不需要从根节点开始,可以从任意节点开始。

// 思路:把所有的节点都看做根节点进行遍历
// 看不懂,不理解
class SolutionVariation2 {public:bool hasPathSum(TreeNode* root, int sum) {if (!root) {return false;}// recursion terminatorreturn hasSubPathSum(root, sum)|| hasPathSum(root->left, sum)|| hasPathSum(root->right, sum);}bool hasSubPathSum(TreeNode* root, int sum) {if (!root) {return false;}if (root->val == sum) {return true;}return hasSubPathSum(root->left, sum - root->val) ||hasSubPathSum(root->right, sum - root->val);}};

[经验分享] 覃超线上直播课-模拟面试相关推荐

  1. [经验分享] 覃超线上直播课 如何快速搞定秋招算法面试

    本文为作者关于覃超在2020年07月12日的线上直播课的学习笔记. 再次强调 不要死磕.不要对于写的又臭又长又充满bug的代码,不停的打补丁.就算最后花费大力气通过了,也没什么进步.因为这时候已经耗干 ...

  2. 计算机检测维修与数据恢复国赛培训线上直播课火热进行中

    红警(中国)维修连锁,已于2020年2月份正式上线"网上教学"模块,利用"互联网+教育"进行直播教学. 学生在线学习 线上 直播课 一.培训目标 通过理论与实战 ...

  3. 微生物组-扩增子16S分析研讨会(参加线上直播课还可免费参加线下课 )

    " 福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组和Python课程的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次 ...

  4. CSGO游戏搬砖项目线上直播课来啦

    ️通知️:明晚8:00[3.18日],钉钉线上直播,优秀学员分享他们操作CSGO游戏搬砖项目中的经验和心得,希望大家准时参加,尤其新生,别翘课哈!

  5. [经验分享] 覃超直播课学习笔记

    2020年7月2日,覃超线上直播课,秋招知识问答. 字节跳动招什么样的人? 技术面试: 技术优秀 计算机基础 系统设计 代码和语言 算法和数据结构 HR面试: 坦诚正直 持续学习 团队协作 责任心,主 ...

  6. 【线上直播】深度学习简介与落地实战经验分享

    分享嘉宾: 嘉宾简介: 郑泽宇,知衣科技联合创始人兼CEO,美国Carnegie Mellon University(CMU)硕士,畅销书<TensorFlow:实战Google深度学习框架&g ...

  7. 线上直播 线下分享丨这样的2019 ACOUG年会你绝对喜欢!

     ACOUG线上直播来啦! 近来,小编总是收到这样的私信: "很期待ACOUG年会,但人不在北京,去不了怎么办?" "啊,ACOUG是12月21日(本周六)下午,我出差不 ...

  8. 教育培训网站源码,大班课/小班课线上直播都能用

    随着时间的推移,教育培训模式在不断发生变化中,通过APP线上直播,把线下培训和手机移动学习做有效的整合,这种便捷的培训模式正被越来越多的人所接受.那么教育培训网站源码开发有什么优势呢? <met ...

  9. 阿里云2020年云栖大会线上直播地址分享

    最新消息,阿里云在官微上宣布"2020云栖大会"即将于9月17日-18日开幕,大会由阿里巴巴集团主办,是面向政府.产业.开发者的世界级.现象级科技大会. 云栖大会的前身可追溯到20 ...

最新文章

  1. 令人迷惑的ATT的jmp:直接跳转和间接跳转 [转]
  2. rails3高级查询
  3. hdu1518深搜DFS
  4. java用流体加减乘除_任意输入两个数,完成加法、减法、乘法、除法运算!(加减乘除运算分别定义四个方法)_学小易找答案...
  5. 10个顶级的CSS3代码生成器
  6. 基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现
  7. c语言山东科技大学答案oj,山东科技大学oj部分题目记答案.doc
  8. 重庆新建建筑中绿色建材应用比例超过70%
  9. sharepoint 2010如何下载文件
  10. 自己用qt编写的图片查看器
  11. 二分法求解方程的根java_【数值分析】利用二分法和牛顿公式求解方程的根
  12. 在线可视化布局HTML
  13. java编程填空及答案_JAVA填空题标准答案(103题)
  14. “抖快”拯救不了服装业,起死回生仍需依靠数字化
  15. 【设计】死区时间控制
  16. 复数乘法 哔哩哔哩2020校园招聘面试题详解
  17. 一文让你了解RFID标签芯片厂家有哪些?
  18. 《面朝大海,春暖花开》(海子)
  19. 远程桌面瘦客户机的优点和缺点
  20. 共享打印机提示0x000006cc的解决方法

热门文章

  1. C语言RSA实现对字符串加密,C语言实现RSA加解密算法
  2. 蠕虫和从传统计算机病毒的区别主要体现在,蠕虫和传统计算机病毒的区别 病毒蠕虫和特洛伊木马...
  3. excel 数据透视表,笔记6,权亮
  4. handle原理解析
  5. java读取文件的字节数据
  6. Android开发--CardView使用
  7. ElasticSearch 7.x 入门与实战
  8. 联想(Lenovo) 小新M7268W 黑白激光无线WiFi打印多功能一体机 出现:打印机故障:显示扫描单元未找到初始位置 或者 扫描单元马达故障 解决办法
  9. 华为分布式文件存储服务器配置,分布式存储服务器
  10. EEPROM, NAND FLASH, NOR FLASH