遇到过的笔试/面试题目汇总

笔试基础

  • java中可以有没初始化的变量吗?
    类和函数中都可以有;只要在使用前完成初始化即可
  • String s;声明没有初始化,可以打印吗?
    不行,不管基本类型、还是对象,都需要在使用前初始化
  • system.out.println(“5”+2)结果是多少?
    52
  • 抽象类可以实现方法吗?
    抽象类可以实现其中的部分方法
  • 抽象方法可以实现吗?
    标记了abstract的方法不能被实现!!
  • 子类对象转换为父类,再转换为子类,可以吗?
    可以的,能正常使用
  • 类中未初始化的字段默认是?
    0/false
  • XSS攻击是什么?
    有整理,详见博客…
  • 新生代那种情况下回进入老年代?
    见博客整理(JVM部分)
  • 再散列法中,m的范围
    0,…m-1
  • 子类与父类的关系?
    泛化/继承 => 也称为is a kind of
  • String str="我是谁呢! ";则str的长度为?
    6,一个汉字通常占2个字节; 而java中char就是2字节的!
  • shell中if…else的写法
    Shell if else语句 => 有then!

面试题

携程一面

  • 5种IO模型,阻塞非阻塞,同步异步
  • 进程间通信
  • Java线程池(参数是重点)
  • java内存模型
  • hashMap在1.7、1.8中的实现(其中的头插法尾插法)
  • HashMap并发导致什么问题,举例 => 即为什么线程不安全
  • 垃圾回收(引用计数的问题、可达性分析) => 可以讲的很多,自己回答得很少
  • 正向代理、反向代理的区别
  • 项目:缓存穿透、缓存雪崩
  • 项目:消息队列框架是怎么实现的?消息丢失了怎么办?
    为防止丢失,可进行持久化
  • 项目:项目中事务怎么处理的?
  • 项目:使用RPC有什么用?
  • 项目:如何保证订单号的唯一性?
  • 总结
    第一次面试,感觉对SSM项目不熟悉,Java基础遗忘了很多,语言组织也有问题

携程二面

  • 如何解决超卖问题
  • 更新缓存失败如何处理
  • 系统响应慢如何处理
  • redis冷启动如何处理
  • MQ阻塞如何处理
  • 如何维护订单状态

腾讯电话一面

  • 存储引擎,InnoDB/MyISAM区别
  • TCP、UDP、HTTP的区别
  • TCP三次握手、四次挥手
  • 有哪些排序算法,特点
  • 项目:ucore
  • 总结
    讲项目时没有分清重点、主次 => 下次先讲清楚每个lab做了什么!!!

腾讯二面(挂)

  • 项目(做了什么、你认为的难点)
  • 进程间通信方式
  • 命令行(查看cpu、查看网络)

网易一面

  • MyISAM锁与InnoDB锁讲解
  • 数据库表查询太慢如何处理
  • linux命令
  • 数据库死锁如何发现、如何处理
  • MySQL的explain命令
    使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。

网易二面

  • 分析父子进程卡住了的问题,联系管道
  • HTTP的 Content-length
  • HTTP必须使用TCP吗
  • HTTP1.1流水线发送,可以后发的先收到吗
  • 红黑树
  • 为什么数据库使用B+树而不是红黑树
  • MySQL连接资源耗光了怎么排查
  • MySQL死锁怎么解决
  • 同一个页面,不用人看到不同数据,如何实现?
  • 缓存穿透如何处理

猿辅导一面(挂)

  • 项目…
  • 写后读问题
  • httpclient与RPC的区别
  • 使用MVC有什么优点

美团一面(挂)

  • 深克隆/浅克隆,深克隆在并发场景的风险?
  • SQL写连接=> 不会写!
  • 泛型的使用场景
  • ConcurrentModificationException异常什么时候出现
  • 为什么重写了equals方法要重写hashCode方法?
  • String、StringBuilder、StringBuilder的区别
    String、StringBuffer与StringBuilder之间区别
  • hashMap线程安全问题
  • 数据库隔离级别
  • 为什么MySQL默认为REATPEATABLE-READ?
  • B+树,为什么要用B+树做索引?

腾讯一面

  • 全是ucore项目细节…

腾讯二面

  • ucore细节……

字节一面

  • MySQL复制方式?
  • SSO怎么做的?
  • 关于RPC、Solr等细节 => 不会
  • Nginx进程模型、IO模型
  • 倒排索引、正排索引
  • 下单、扣库存怎么做?
  • 有遇到超卖问题吗?
  • 缓存用到哪些地方
  • malloc与kmalloc
  • RCU
  • HTTP1.0/1.1/2
  • ucore与操作系统……

字节二三面

……

华为一面

  • 类中只有char a; int b; 两个成员,求对象的sizeof()
    8,因为通常使用了四字节对齐!
  • 如下题
        int a=12345678;
        char* b=(char *)&a;
        printf("%d\n",*b);
    
    最终打印的是多少(面试时答错了)。 => 因为b这个指针最终是被视为char类型的,所以最终取到的仅是a低地址,通常小端模式下低字节存在低地址,所以打印的应该是78

招银网络一面

  • 构造函数能作为虚函数吗
    假设构造函数是虚的。就须要通过 vtable来调用。但是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。实际上,vtable在构造函数调用后才建立,因而构造函数不可能成为虚函数
  • SQL取第k大的数
    暂时参考:MySQL_ mysql 不用 order by 实现 第K大 功能

撕题

春招实习 ——————————————————————————————————————————————————

  • 股票交易问题(富途笔试)
  • 爬楼梯(携程一面)
    100级楼梯,每次可以走1或者2步,问一共有多少种走法?
    => 递归/动态规划
  • 生成随机数(携程一面,没答上来)
    问:给定两个[0-5]的随机数,如何生成一个[0-8]的随机数?
    => 方法是拒绝抽样470. 用 Rand7() 实现 Rand10()
  • 子集问题(网易笔试)
    用的回溯法时间超限了 => 直接穷举或者增量穷举可以吗?
    求解幂集问题
  • 满减优惠(网易笔试)
    容易想到暴力计算,遍历所有组合可能 => 但是超时
    应该是动态规划 => 0-1背包问题!
    参考:促销中“满X优惠”问题的两种解法:动态规划和枚举法
  • flood fill算法(京东笔试)
    733. 图像渲染
    类似的题有:200. 岛屿数量 => DFS、并查集等都可解决…
  • 最长公共连续子串(美团面试)
    参考:最长公共连续子串
  • 全排列问题(猿辅导一面)
    回溯法即可…尽然当场没写出来!
  • 字符串翻转(腾讯一面)
    算法很简单,但是用C语言写,需要注意:
    1.char* str=“hello world good”; 是常量不能修改!
    2.修改后,末尾记得加上’\0’;
  • 股票买卖问题(字节一面)
    一次交易、两次交易、不限交易次数……
    121. 买卖股票的最佳时机

秋招 ————————————————————————————————————————————

  • 动态规划(笔试)

长度的n的字符串,只有a、b两种字符,且不能出现aba、bab两个子串。问这样的字符串一共有多少个

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 50;
const LL MOD = 998244353;
LL dp[N][2][2];//dp[i][j][k] 表示前i个字符 倒数第二个是j,倒数第一个是k的方案数。0表示a,1表示b
int main() {
    int n; cin >> n;
    if(n <= 3) {
        cout <<n * 2;
        return 0;
    }
    dp[3][0][0] = dp[3][1][1] = 2;
    dp[3][0][1] = dp[3][1][0] = 1;
    for(int i = 4; i <= n; i++) {
        dp[i][0][0] = (dp[i-1][0][0] + dp[i-1][1][0]) % MOD;
        dp[i][0][1] = dp[i-1][0][0];
        dp[i][1][0] = dp[i-1][1][1];
        dp[i][1][1] = (dp[i-1][0][1] + dp[i-1][1][1]) % MOD;
    }
    LL ans = 0;
    for(int i = 0; i < 2; i++){
        for(int j = 0; j < 2; j++) {
            ans += dp[n][i][j];
            ans %=MOD;
        }
    }
    cout << ans;
    return 0;
}

// 易错解法 => 这种解法时,考虑倒数第二个字符的时候漏掉了对倒数第三个字符的限制,故结果偏大
int solve1(int n){
    vector<int> dpa(n);         // str[i]为a,且满足条件的个数
    vector<int> dpb(n);         // str[i]为b,且满足条件的个数
    dpa[0]=1; dpa[1]=2;
    dpa[0]=1; dpb[1]=2;
    for(int i=2;i<n;i++){
        dpa[i]=(dpa[i-1]+dpa[i-2])+(dpa[i-1]+dpb[i-2])+(dpb[i-1]+dpb[i-2]);   // aaa、baa、bba
        dpb[i]=(dpb[i-1]+dpb[i-2])+(dpa[i-1]+dpa[i-2])+(dpb[i-1]+dpa[i-2]);     // bbb、aab、abb
    }
    return min(dpa[n-1],dpb[n-1]);
}

另外,有题友说是斐波那契数列,暂时没分析出来……

  • 最短路径(笔试)
    题目忘了,但是显然是最短路径题目,且是多源最短路径,可使用Floyd算法(dijkstra执行n次亦可)
    可参考:743. 网络延迟时间

  • 思路分析型(笔试)

只有字符a和c组成的字符串,通过交换相邻的两个元素,最终使得所有a连在一起,所有c连在一起。最少交换多少次
比如: acca => 2次 ; 变为ccaa

分析:其实最终变为ccccc…aaaaa 即可。对于每个a,最终它后面的c是都要到它前面的,所以其实统计每个a后面的c个数之和即可(笔试时为何没有想到!!!)

for(int i=n-1;i>=0;i--){
    if(s[i]=='c') cnt_c++;			//num表示c的个数
    else sum+=cnt_c;				//sum表示移动次数
}
  • 滑动窗口最大值(笔试)
    题目记不住了,大概是这么个思路,参考:239. 滑动窗口最大值

  • (以及BFS的思路,重要!)
    题目:两个数组,从每个数组中取一个数相加,求最小的前k个和
    面试时想到了取最小和之后要判断下一个最小和是哪个,但是却忽略了BFS的思路!因为下一个最小和下一个最小和,可能下一个次小和的下一个最小和更大! 所以必须要使用BFS+优先队列,而不能直接往下每次都取最小和……
    参考:【C++】【手撕】【top K】两个有序数组间相加和的Topk问题;优先队列、最大堆

  • 子串问题
    题目:给定一个长为n的01串,求最大的子串长度,其中子串的01个数相等。如01100010,最长01串就是110001,输出6。

    // 由于只有0、1,使用cnt记录1的个数,遇到0则抵消,当cnt为0时,说明构成了一个连续且01个数相等的子串(其实有点类似于摩尔投票)
    int maxChildSeq(vector<int> nums){
       int maxLen=0; int n=nums.size();
       for(int i=0;i<n;i++){
           int cnt=0;
           for(int j=i;j<n;j++){
               if(nums[j]==1) cnt++;
               else cnt--;
               if(cnt==0) maxLen=max(maxLen,j-i+1);
           }
       }
       return maxLen;
    }
    
  • 数学推理
    题目:给定n个路灯,编号i从1到n,初始的时候路灯都是关着的。有n个时刻,t从1到n,在每个时刻t,我们会把编号为t的倍数的路灯状态进行改变(关闭变成开启、开启变成关闭)。求在时刻n结束后,有多少路灯是开着的。
    :分别对每个路灯进行研究 => 在n个时刻内,编号为i的路灯被打开、关闭的次数如何计算? => 当i模上t为0时,则会被打开/关闭 => 当i模t为0的次数为奇数时,则灯i最终是开着的 => 即当i的因子个数为奇数时,灯i最终是开着的 => 当i是整数的平方时,i的因子个数为奇数(经面试官引导,归纳出来的) ……

    int solve(int n){
        int cnt=0;
        for(int i=1;i*i<=n;i++){
            cnt++;
        }
        return cnt;
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值