mark
    简历投得很晚,感谢华为数通给了我今年第一次面试机会。     背景介绍:机械本硕,但是硕士的方向偏材料,觉得写代码的工作岗位不会轻易进厂,遂转嵌入式。     面试流程:先做了一个简短的自我介绍,然后面试官问了简历里的项目,感觉面试官对这种从网上找来的项目不是很感兴趣,基本没怎么问,说这种跟着做的项目没有自己的想法。。。接着问科研的项目,非科班的,感觉面试官听得挺认真的,虽然我答得很拉跨。    八股方面问都不是太深入,基本没问网络相关的问题:    数据结构方面,问了数组和链表的区别;    操作系统方面,问了对多线程/多进程的理解;    然后问了两个进程之间可以访问一个全局变量吗(这里当时答错了,说得还挺久,面试官又换了几个角度问,最后直接点出来了,我才知道前面扯了一大堆无关的回答,场面一度很尴尬,拉跨哈哈哈)。    之后手撕一道二维数组的排序问题,没有做过类似的,当时不太搞懂题目的意思,没有做出来,面试结束直接发感谢信。。。哈哈哈,先在这里接受一波嘲笑。    后面在网上找到了原题,哎,混子就是我。。。这里贴一下原题,还有自己的解法,由于测试样例太少,这个解法仅供参考,不一定对。。。二维数组的列排序 https://www.cnblogs.com/mfrbuaa/p/5246555.html    给出一个二维数组。请将这个二维数组按第i列(i从1開始)排序,假设第i列同样,则对同样的行按第i+1列的元素排序。假设第i+1列的元素也同样,则继续比較第i+2列,以此类推,直到最后一列。假设第i列到最后一列都同样,则按原序排列。 实现下面接口:输入一个m*n 的整数数组。实现按规则排列,返回排列后的数组。调用者会保证:比方输入数组为: 1,2,32,3,42,3,11,3,1按第二列排序: 输出: 1,2,32,3,11,3,12,3,4#include <iostream>using namespace std;#include <vector>#include <algorithm>//打印数组void printNums(vector<vector<int>> &nums) {    int n = nums.size();    if (n == 0) return;    int m = nums[0].size();    for (int i = 0; i < n; ++i) {        for (int j = 0; j < m; ++j) {            cout << nums[i][j] << " ";        }        cout << endl;    }    cout << endl;}//按列对数组排序void sortNums(vector<vector<int>> &nums, int r1, int r2, int c) {    //处理递归结束条件    if (nums.size() == 0) return;     if (r1 >= nums.size() || r2 >= nums.size() || c >= nums[0].size()) {        return;     }    if (r1 >= r2) return; //只剩一行了,不排也罢    //对当前列排序:使用稳定的冒泡排序    for (int i = 0; i < r2 - r1 + 1; ++i) { //排序r2 - r1 + 1轮        for (int j = r1; j < r2 - i; ++j) {             if (j + 1 <= r2 && nums[j][c] > nums[j + 1][c]) {                swap(nums[j], nums[j + 1]);            }        }    }    //按照排序规则,查找有相同元素的行数,递归排序    for (int i = r1; i <= r2; ++i) { //每次递归,都只对数组的c列的[r1, r2]范围内的行进行排序        if (i + 1 <= r2 && nums[i][c] == nums[i + 1][c]) {            int j = i + 1;            while (j < r2 && nums[j][c] == nums[i][c]) ++j;            if (j <= r2 && nums[j][c] != nums[i][c]) --j;            //找出当前列中元素相同的行的范围后,继续递归            sortNums(nums, i, j, c + 1);            i = j;        }    }}int main() {    //输入    vector<vector<int>> nums = {{1, 2, 3}, {2, 3, 1}, {2, 2, 1}, {1, 3, 1}, {2, 4, 5}, {3, 4, 4}};    int cols = 1; //指定的列    cout << "排序前:" << endl;    printNums(nums);    sortNums(nums, 0, nums.size() - 1, cols);    cout << "排序后:" << endl;    printNums(nums);    return 0;}
点赞 7
评论 3
全部评论

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务