小米软开一面

  1. Linux在目录下用命令查找文件。
    which用于查找并显示给定命令的绝对路径,环境变量中PATH参数也可以被查出来。
    寻找特定文件: whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径,该命令只能用于程序名的搜索。
    缓存查找文件: locate 搜索一个数据库/var/lib/mlocatedb,这个数据库中含有本地所有文件信息,Linux系统自动创建这个数据库。
    遍历文件查找:find 命令可以说是最重要的查找命令了,该命令参数较多。

  2. 用过ps命令没?
    Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

  3. vim命令的使用
    vim是Linux环境下一款功能强大、高度可定制的文本编辑工具。
    vim一般有6种工作模式。
    1)普通模式:使用vim打开一个文件时默认模式,也叫命令模式,允许用户通过各种命令浏览代码、滚屏等操作。
    2)插入模式:也可以叫做编辑模式,在普通模式下敲击 i 、a 或 o 就进入插入模式,允许用户通过键盘输入、编辑。
    3)命令行模式:在普通模式下,先输入冒号:,接着输入命令,就可以通过配置命令对vim进行配置了,如改变颜色主题、显示行号等,这些配置命令也可以保存到/etc/vim/vimrc配置文件中,每次打开默认配置执行。
    4)可视化模式:在普通模式下敲击前盘上的 v 键,就进入可视化模式,然后移动光标就可以选中一块文本,常用来完成文本的复制、粘贴、删除等操作。
    5)替换模式:如果我们想修改某个字符,不需要先进入插入模式,删除,然后再输入新的字符,直接在普通模式下,敲击R键就可以直接替换。
    6)EX模式:类似于命令行模式,可以一次运行多个命令

  4. Linux系统中用ll命令显示出的如“drwxr-xr-x”,表达的是什么意思?
    在这里插入图片描述
    linux drwxr-xr-x意思如下:第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道。后面的分三个三个来看,即 rwx 、r-x 、r-x。第一个: root :r 是可读,w 是可写,x 是可执行,rwx 意思是可读可写可执行。第二个: 一般用户(用户组):r-x 是可读可执行不可写。第三个: 其他用户,r-x 是可读可执行不可写。
    原文:https://blog.csdn.net/weixin_42874157/article/details/89338995

  5. linux命令中用作过滤的是?
    grep是一个强大的文本搜索工具。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

  6. 你对面向对象的理解?
    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
    面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
    C++的三大特征

  7. C++中基本的数据结构
    数组、链表、栈、队列、图、树、哈希等

  8. C++中的逻辑结构
    在这里插入图片描述
    在这里插入图片描述

  9. kmp算法的理解
    在这里插入图片描述
    在这里插入图片描述

  10. 哈夫曼树的理解
    构造思想:每次把权值最小的两棵二叉树合并,合并后树的权值为合并前两棵树权值的和,所以这样子哈夫曼树的结构有点像金字塔,最顶端权值最大。
    在这里插入图片描述
    在这里插入图片描述

  11. 常见的查找算法
    在这里插入图片描述

  12. 哈希函数的思想
    不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(HashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素,其中哈希方法中用到的转换函数称为哈希函数,构造出来的结构叫哈希表(散列表)。
    常见的有以下几种:
    1)直接定制法: 取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B,其中A和B为常数
    优点: 简单,均匀
    缺点: 需要事先知道关键字的分布情况,如果关键字分布很散(范围很大),就需要浪费很多的空间
    使用范围: 关键字分布范围小且最好连续的情况
    2)除留余数法: 取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key % p,p<=m(p的选择很重要,一般取素数或m)
    优点: 可以将范围很大的关键字都模到一个范围内
    缺点: 对p的选择很重要
    使用范围: 关键字分布不均匀
    3)平方取中法(不常用): 取关键字平方后的中间几位作为散列地址
    4)随机数法(不常用): 选择一随机函数,取关键字作为随机函数的种子生成随机值作为散列地址,通常用于关键字长度不同的场合
    5)折叠法(不常用): 将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址

  13. 在大量的数当中,找到前100个,如何高效的实现。
    见链接

  14. 常见的排序算法?
    见链接

  15. 快速排序的思想,时间复杂度和空间复杂度,是稳定的吗?
    在这里插入图片描述

  16. 手撕算法:查找1-n数之间所有数中1的个数,比如“11”这个数表示有两个,10有1个。

#include<iostream>
using namespace std;
int Compute(int n){
    int t=0;
    while(n){
        if(n%10==1){
            t++;
        }
        n/=10;
    }
    return t;
}
int main() {
    int sum=0;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int t=Compute(i);
        sum+=t;
    }
    cout<<sum<<endl;
    return 0;
}

  1. 手撕算法:删除链表中重复的节点
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        if(head==nullptr||head->next==NULL)
            return head;
        ListNode *h=head;
        ListNode *g=new ListNode(1);
        g->next=head;
        ListNode *hp=g;
        while(h!=nullptr&&h->next!=NULL){
            int item=0;
            while(h->val==h->next->val&&h->next!=NULL){
                h->next=h->next->next;
                item=1;
            }
            h=h->next;
            if(item==1)
                hp->next=h;
            else
                hp=hp->next;
        }
        return g->next;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值