10.14海信笔试

岗位是软件(嵌入式),题目中会涉及到单片机的内容,在其他如tp的笔试中没有;
编程题采用核心代码模式,不用处理输入输出nice!

1.编程:字符串数组中的一个不同字符,返回位置

  1. 注意:
    • 一般编程习惯下标是0开始,而它这里位置是从1开始!
    • else只和最近的if匹配!
    • 字符串数组与二维指针 与指针数组字符串数组 作为 形参为二维指针的 输入,不可直接输入,应该借助指针数组
          char str[3][20] = {"abcd","abcd","cbcc"};
          //==字符串数组 作为 形参为二维指针的 输入,不可直接输入,应该借助指针数组
          char *p[3];//指针数组
          p[0] = str[0];p[1] = str[1];p[2] = str[2];
      
  2. 暴力解法:
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 struct Point {
    int x;
    int y;
};

struct Point pos(char** mat, int matLen ) {
    // write code here
    int len = strlen(mat[0]);
    struct Point poi;
    int fg = 0;
    for (int i = 0; i < len; i++) {
        if (mat[0][i] != mat [1][i]) {
            fg = 1;
            poi.y = i+1;
        }
    }
    if (fg == 1) //0,1不同
    { 
        for (int i = 0; i < len; i++) {
            if (mat[0][i] != mat [2][i]) {//0,2不同
                poi.x = 1;
                return poi;                   
            }
        }
        poi.x = 2;
        return poi;
    } 
    if(fg ==0)//0,1同
    {
        for (int j = 2; j < matLen; j++) {
            for (int i = 0; i < len; i++) {
                if (mat[0][i] != mat [j][i]) {
                    poi.x = j+1;
                    poi.y = i+1;
                    return poi;
                }
            }
        }
    }
    return poi;
}

int main(){
    char str[3][20] = {"abcd","abcd","cbcc"};
    //字符串数组 作为 形参为二维指针的 输入,不可直接输入,应该借助指针数组
    char *p[3];//指针数组
    p[0] = str[0];p[1] = str[1];p[2] = str[2];
    struct Point poss = pos(p,3);
    printf("%d %d",poss.x,poss.y);
}

2.编程2:判断一个字符串中有几个“haixin”

  1. 暴力:
    • 长度小于6返回
    • 否则,找到h,再判断后几个是否也aixin
  2. 优化:KMP算法。但是这里由于模式串是“haixin”,使用KMP似乎优势不大
  3. KMP算法
    • 在一个串中查找是否出现过另一个串:当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。
    • 两类经典问题:字符串匹配,重复子串问题lc459(当一个字符串由重复子串组成的,最长相等前后缀不包含的子串就是最小重复子串)
    • next数组:前缀表里,统计了各个位置为终点字符串的最长相同前后缀的长度。

3.选择题

  1. linux shell脚本的输出结果
  2. linux系统交换分区的作用:
    • 作用:完成虚拟存储、用磁盘空间模拟硬盘空间、允许应用程序使用多于实际内存的存储容量
    • 类似于windows的 虚拟内存,作用是在物理内存(即实际内存)使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用
    • 使用 swap 交换分区 优点是,通过操作系统的调度,应用程序实际可以使用的内存空间将远远超过系统的物理内存。由于硬盘空间的价格远比 RAM 要低,因此这种方式无疑是经济实惠的。但速度比实际内存低
  3. 单片机编程语言C为主,汇编为辅;
  4. 单片机是同步系统:单片机中的各个模块是同步工作的,模块间通过统一的节拍来工作,这个统一节拍就是单片机的时钟
  5. 单片机的时间单位都是时钟节拍的整数倍;单片机内部在一个时钟节拍内只能做一件事情,所以单片机发现一些变化或者做一些事情的最小时间单位就是1个时钟节拍;
  6. 主频越高性能越高:时钟周期的长度即快慢影响了单片机的速度,所以这个时钟就叫做单片机的主频;
  7. 上拉下拉电阻:
    • 作用
      • 消除信号线的浮动状态,确保在未被外部设备控制时,信号线具有明确的状态。
      • 防静电反干扰:因为管脚悬空就比较容易接受外界的电磁干,对于某些芯片,为了防止静电造成损坏,不用的管脚不能悬空,
      • 电阻匹配,抑制反射波干扰
      • 提高芯片输入信号的噪声容限增强抗干扰能力。
    • 上拉电阻还可以通过上拉至更高电平,增大电流,增强引脚的驱动能力
  8. 单片机基础知识:https://blog.csdn.net/qq_37196748/article/details/130345635
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
60、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口 用synchronized关键字修饰同步方法 反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 61、sleep() 和 wait() 有什么区别? 答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 62、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 63、启动一个线程是用run()还是start()? 答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 64、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 答:不能,一个对象的一个synchronized方法只能由一个线程访问。 65、请说出你所知道的线程同步的方法。 答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。 sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。 notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。 66、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 67、线程的基本概念、线程的基本状态以及状态之间的关系

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值