面试准备

项目经历介绍

  1. 项目背景和要解决的问题(尽可能简洁明了);
  2. 分析问题的思路,解决问题的步骤;(需逻辑清晰,条理清楚)
  3. 在解决问题中遇到了哪些具体的困难,如何分析,解决;有过哪些思路,方案,最后如何考量选择;
  4. 在解决问题中用到了哪种具体技术(何种算法),为何选择这种技术,对技术背后原理有没有理解学习,如opencv函数实现原理;
  5. 从实践中的来了哪些经验,最后成果如何。
    以上需要整理好文档,做好总结。

    知识储备

    除开基础算法,原理知识以外,需要了解上层的一些知识,如微服务器框架,前后端如何对接,linux部署项目,基本命令;即底层知识应用在哪些方面,为什么要选择这种方案,一个系统的项目由哪些构成;
    尽可能了解更多的语言,以及语言使用特性及其选择;

    百度提前批面经

    选一个最好的项目介绍,自己在其中的任务,遇到的最大的困难,怎么解决的
    数据库 事务 锁 四种隔离级别 索引好处与坏处 dns域名输入网址到页面
    进程与线程区别
    多态是什么
    类中成员初始化顺序
    linux命令 端口搜索(记不太清)
    .txt文件 几行数据 shell命令查找 不同的城市名abc.txt
    1 xiaoming shanghai 25
    2 xiaohong nanjing 16
    3 xiaowei hangzhou 23
    4 axing nanjing 27
    ...

有多少个不同的城市名
逻辑题
8个球 其中1个球比7个球轻(其他一样重),至少用天秤称几次找到这个球 两次
先两边分别放三个球 如果相等 则轻的球在剩下两个中
大整数加法 手撕

#include<iostream>
#include<string>
#include<stdlib.h>
#include <algorithm>
#include <sstream>
#include<stdio.h>
using namespace std;
/*string itos(long long tmp)
{
    string s1;
    stringstream ss;
    ss << tmp;
    ss>>s1;
    return s1;
}*/
int strComp(string &s1, string &s2)//返回0,表示len1>len2
{
    int len1 = s1.length();
    int len2 = s2.length();
    if (len1>len2)
        return 0;
    else if (len1<len2)
        return 1;
    else
    {
        if (s1 >= s2)
            return 0;
        else
            return 1;
    }
}
string add1(string numStr1, string numStr2) //两个都是正
{
    string res;
    int c = 0, temp;
    if (numStr1.size() != numStr2.size())
    {                                           //长度不同先补零
        while (numStr1.size() < numStr2.size())
            numStr1.insert(0, 1, '0');
        while (numStr1.size() > numStr2.size())
             numStr2.insert(0, 1, '0');  //在0下标元素前面插一个0
    }
    for (int i = numStr1.size() - 1; i >= 0; i--)
    {                                                    //按位相加,从低位开始
        temp = (numStr1[i] - '0') + (numStr2[i] - '0') + c;
        if (temp>9)
        {
            temp = temp % 10;
            c = 1;        
        }
        else
            c = 0;
        res += to_string(temp);
    }
    if (c == 1)  res += '1';//最高位还有进位,则补1个'1'
    reverse(res.begin(), res.end());//逆置字符串后结果就是相加后的值(res是从低位往里添加字符的)
    return res;
}
string add2(string numStr1, string numStr2) //两个都是负
{
    string res;
    int c = 0, temp;
    if (numStr1.size() != numStr2.size())
    {                                           //长度不同先补零
        while (numStr1.size() < numStr2.size())
        {
            numStr1.insert(1, 1, '0');
        }
        while (numStr1.size() > numStr2.size())
        {
            numStr2.insert(1, 1, '0');  //在1下标元素前面插一个0
        }
    }
    for (int i = numStr1.size() - 1; i>0; i--)
    {                                                  //最高位不管
        temp = (numStr1[i] - '0') + (numStr2[i] - '0') + c;
        if (temp>9)
        {
            temp = temp % 10;
            c = 1;
        }
        else
            c = 0;
        res += to_string(temp);
    }
    if (c)res += '1';//最高位
    res += '-';      //添加'-'
    reverse(res.begin(), res.end());
    return res;
}

string add3(string numStr1, string numStr2) //一正一负
{
    string res;
    int flag = 0;
    int c = 0, temp;
    string a, b;//a-b a是被减数 b是减数 带负号的给减数
    if (numStr1[0] == '-') { b = numStr1; a = numStr2; }
    else{ b = numStr2; a = numStr1; }
    b = b.substr(1);
    if (a.size() != b.size())
    {                                           //长度不同先补零
        while (a.size() < b.size())
        {
            a.insert(0, 1, '0');
        }
        while (a.size() > b.size())
        {
            b.insert(0, 1, '0');  //在0下标元素前面插一个0
        }
    }
    if (strComp(a, b) == 1)
    {
        string t = b;
        b = a;
        a = t;
        flag = 1;
    }
    for (int i = a.size() - 1; i>=0; i--)
    {                                                  //最高位不管
        temp = (a[i] - '0')-(b[i] - '0')-c;
        if (temp<0)
        {
            temp =temp+10;
            c = 1;
        }
        else
            c = 0;
        res += to_string(temp);
    }
    if(flag==1)res += '-';      //添加'-'
    reverse(res.begin(), res.end());
    return res;
}
int main()
{
    string numStr1, numStr2;
    while (cin >> numStr1 >> numStr2)
    {
        string result;
        if (numStr1[0] != '-'&&numStr2[0] != '-') result = add1(numStr1, numStr2);
        else if (numStr1[0] == '-'&&numStr2[0] == '-') result = add2(numStr1, numStr2);
        else result = add3(numStr1, numStr2);
        cout << result << endl;
    }
    system("pause");
    return 0;
}

腾讯提前批

1.vector底层实现原理 怎么扩容 插入时间复杂度是多少 扩容会有影响吗?
2.输入网址到页面生成发生的事情?
3.ip寻址和mac寻址有什么不同,怎么实现的?
4.ping需要100ms 则从输入地址到返回页面需要多久?
5.内存结构怎么分布的 全局变量和静态变量放在一起吗?堆和栈之间是什么?线程共用栈吗?不共用的话栈都放在哪?
6.程序有bug 可以修改代码段吗?
7.字节序是什么 有什么用 怎么写代码区分大端还是小端?
8.tcp和udp的区别?
9.tcp怎么保证可靠?

富途测试一面

1.linux命令 :查找文件内所有的‘123’,批量替换为‘abc’
/var/www/test/index.html文件夹下的所有文件内容中的abc字符串换成123

sed -i "s/abc/123/g" /var/www/test/index.html
2.http长连接、短连接
什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

总之,长连接和短连接的选择要视情况而定。

3.http状态码 301 和302
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
有时候需要自动刷新页面,比如5秒后回到订单详细页面之类
登录后重定向到指定的页面,这种场景比较常见就是登录成功跳转到具体的系统页面
4.状态码 403的原因
1、你的IP被列入黑名单。

2、你在一定时间内过多地访问此网站(一般是用采集程序),被防火墙拒绝访问了。

3、网站域名解析到了空间,但空间未绑定此域名。

4、你的网页脚本文件在当前目录下没有执行权限。
5.线程间通信
##烽火 美的一面
1.数据库性能优化
2.组合索引编写
3.项目中遇到的问题,怎么解决,扮演什么角***r>4.epoll内核和用户态怎么交互
5.select和epoll区别
6.红黑树的了解
7.图片说明

8.线程之间的通信方式有哪些?

线程之间通信:

  • 使用全局变量
  • 使用信号机制
  • 使用事件
  • 信号量
  • 管程

    10 富途二面

    梯度1:1-5笔30.00
    梯度2:6-20笔15.00
    梯度3:21-50笔10.00
    梯度4:51-100笔9.00
    梯度5:101-500笔8.00
    梯度6:501-1000笔7.00
    梯度7:1001-2000笔6.00
    梯度8:2001-3000笔5.00
    梯度9:3001-4000笔4.00
    梯度10:4001-5000笔3.00
    梯度11:5001-6000笔2.00
    梯度12:6001笔及以上1.00
    实现一个函数,用于计算用户一个月共计交费多少港元
    假设一个用户,一个月交易了6笔订单,则在梯度1交费共计: 30港元*5=150港元,在梯度二交费:15港元,一共交
    费165港元。

    11广联达一面

    内存泄漏怎么检测
#define CRTDBG_MAP_ALLOC  //放在程序最前
#include <iostream>
#include <stdlib.h>    
#include <crtdbg.h> 
using namespace std;

int main()
{
    int *a = new int [10];
    int *p = new int[1000];
    _CrtDumpMemoryLeaks();  //放在程序最后
    system("pause");
    return 0;
}
全部评论

相关推荐

劝退式:感觉有人回才是不正常的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务