2020阅文Java实习笔试

本文详细介绍了2020年5月19日阅文集团的Java实习笔试过程,包括题型、时长和平台。试题涵盖加密算法、分布式、Hadoop、数据结构、网络协议等多个知识点,整体难度适中,但考察范围广泛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅文Java实习笔试

日期:2020年5月19日 19:00 时长:1.5h 平台:牛客网
题型:单选10,多选10,问答1,编程3,压轴1(编程)

总结

整体难度不算很难,但是考察的面比较广。分布式、Hadoop相关知识考察也不少。

单选题

  1. 不对称加密算法 DES/RSA/RC/AES 答案 RSA

    对称加密:

    ​ 对称算法,一个字符串可以通过某个密钥进行加密和解密。速度快效率高,但不安全,数量多时难以管理

    非对称加密:

    ​ 使用两个密钥,公钥、私钥,两个密钥是成对的,加密时使用公钥加密,解密时使用私钥才能完成。适用于分布式系统中的数据加密。常见的有RSA、DSA等

    DES:最著名的对称加密算法,使用56位密钥对64位数据块进行16轮编码

    RSA:应用广泛、历史悠久的非对称密钥加密技术

    RC:对称加密,DES的建议替代算法,输入输出都是64bit

    AES:对称加密算法,使用分组密码体制,将明文切成128位16个字节分组加密,最后把每段加密数据拼起来

  2. 程序运行时,独占系统资源,只有程序本身能改变系统资源状态,这是指

    程序顺序执行的封闭性

  3. 二叉树结点个数计算

  4. 定义一个函数指针,指向的函数有两个int形参,且返回一个函数指针。返回的函数指针指向一个有一个int形参且返回int的函数 int (*(*F)(int,int))(int)

    (*F) 可知F是一个指针,右边有(int,int) 即F是一个函数指针,有两个int形参

    *(*F)(int,int)) 可知(*F)(int,int) 是一个指针,将其看为一个整体T可得

    int(*T)(int) 即一个有一个int形参返回int的函数指针

  5. DNS解析的是什么

    域名指向IP地址

  6. HDFS中block默认保存几份

    3份

    HDFS: Hadoop分布式文件系统。在分布式存储中,有特点:数据分块,分布式的存储在多台机器上;数据块冗余存储在多台机器以提高数据块的可用性;遵从主/从结构的分布式存储集群。

    为了提高每个数据块block的高可用性,在HDFS中每个数据块默认备份存储3份。

  7. HTTP协议相关,RESTful风格表达

    HTTP是无状态的(每次请求都是独立的);是应用层协议

    RESTful 接口中,利用 HTP 协议的 method 字段来描述要对资源操作的方式,比如 GET 表示获取资源,POST表示新增一个资源,PUT 表示更新资源, DELETE 表示删除资源等等。

  8. C++中如果一个整型变量频繁使用,建议将其定义为 auto/register/extern/static

    如果一个变量频繁使用,将其保存在寄存器中,寄存器的速度比内存快很多,使用register即可

    auto:给变量动态分配内存,默认的分配类型

    static:静态分配内存,变量在整个作用域内是全局变量

    extern:声明为外部变量,在函数的外部定义变量

  9. n>=0时,求时间复杂度

    x=2;
    while(x<n/2){
        x = 2*x;
    }
    

    应该是log2N? 不太懂时间复杂度的计算

  10. 不是查看网络故障的命令

    ping / telnet / init / netstat

    init Linux下的进程初始化工具

多选题

  1. HTTP协议 无状态的/禁用Cookies后,session仍能使用/http是TCP/IP的应用/response code 403 表示跳转

    一般情况下,在会话中,服务器存储session的sessionID是通过cookie存到浏览器中的。如果禁用了cookie,浏览器请求无法携带sessionID,服务器无法识别请求中的用户身份,session失效。但可以通过其他方式使用,如将sessionID作为参数追加到url中、通过其他header字段等;

    HTTP协议是无状态的;

    response code 403 表示对请求资源的访问被服务器拒绝,跳转的状态码应为3开头的,301 请求的网页已经永远移动到新位置,服务器会自动将请求者转到新位置

  2. 因特网可用的IP地址 10.0.0.9/127.0.0.1/202.112.0.36/61.256.256.68

    10.0.0.9 是A类的私有IP地址

    127.0.0.1 是本机地址

    61.256.256.68 IP地址不可能为256

  3. 多线程同步机制

    Critical Section / pipe / semaphore / Mutex

    Critical Section 临界区,用来实现“排他性占有”,适用范围是单一进程的各线程之间。可以实现线程间互斥,不能用来实现同步;

    Semaphore 信号量,用来追踪有限的资源,可以被其他进程开启,可以被任何一个线程释放。既能实现线程间互斥,也能实现线程间同步。

    Mutex 在不同的线程之间实现“排他性站有”,即使线程分属于不同进程。可以被其他进程开启,只能被拥有的那个线程释放

    Event 通常使用于 overlapped I/O,或用来设计某些自定义的同步对象。可以用来实现线程的互斥与同步,可以被其他进程开启

    pipe 管道,用于具有亲缘关系的父子进程间的通信

  4. Nginx功能

    静态http服务器 / 虚拟主机 / 反向代理服务器 / 负载均衡

    Nginx是一款高性能http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,能够支持高并发,且资源消耗极少,运行稳定;其应用场景:

    Http服务器,可以独立提供http服务,可以做网页静态服务器

    虚拟主机,实现在一台服务器虚拟出多个网站

    反向代理,负载均衡,使用多台服务器集群,用Nginx做反向代理

  5. hive内置函数

    pow / ntile / row_number / lead

    Apache Hive 是建立在Hadoop架构上的数据仓库,用来进行数据提取、转化、加载。学习成本低,可通过类SQL语句快速实现简单MapReduce统计

    pow(double a,double b) hive中的数值计算函数,计算a的b次幂

    NTILE 将数据分片并求出其百分比

    ROW_NUMBER 从1开始,按照顺序,生成分组内记录的序列。如按照pv降序排列,生成分组内每天的pv名词、获取分组内排序第一的记录、获取session中的第一条refer等

    LEAD(col,n,DEFAULT) 统计窗口内往下第n行值

  6. DNS解析中的顶级域

    com / sina / cn / net

    顶级域名 Top Level Domain

    cn 国家级顶级域名 nTLD/ccTLD,cn us uk 等

    com,net 通用顶级域名 gTLD com-公司企业,net-网络服务机构,org-非营利组织,int-国际组织,gov-政府部门 等

    sina 二级域名/三级域名

  7. 1000m的环形跑道,A 1m/s,B 3m/s 多久后两者相遇

    250s / 1000s / 500s / 333s

    B比A快2m/s 1000m环 , 500s 一圈,1000s 两圈

  8. 进程间通信方式

    管道 / 信号量 / 互斥锁 / Socket

    进程间的7中通信方式

    1. 传统的Unix通信机制 管道/匿名管道 pipe
    2. (高级管道通信 popen)
    3. 有名管道 named pipe FIFO
    4. 信号 Signal
    5. 消息队列 Message queue
    6. 共享内存 shared memory
    7. 信号量 semaphore
    8. 套接字 socket
  9. Redis支持的数据结构

    hash / stack / list / set

    Redis的5个基本数据结构 string list hash set zset

  10. 可利用分治法的场景

    二分法 / 大整数乘法 / 合并排序 / 快速排序

    可以使用分治法求解的经典问题:

    二分搜索、大整数乘法、Strassen矩阵乘法、棋盘覆盖、合并排序、快速排序、线性时间选择、最接近点对问题、循环赛日程表、汉诺塔

问答题

编写将Map转换成JavaBean的工具类方法,实现mapToObject (利用Java反射,不使用第三方类)

public static<T> T mapToObject(Map<String,Object> map,class<T> beanClass){}

    public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass) {
        // 判空
        if (map == null) {
            return null;
        }
        T t = null;
        try {
            // 使用 newInstance 创建对象
            t = beanClass.newInstance();
            // 利用反射获取 Class 对象
            // 可以使用 Class.forName("全类名")、类名.class、对象.getClass 三种方法
            // 获取 Class 对象后,获取所有成员变量,不考虑修饰符,用 getDeclaredFields
            // getFields 则是获取所有 public 修饰的成员变量
            Field[] fields = t.getClass().getDeclaredFields();
            // 遍历获得的成员变量
            for (Field field : fields) {
                // Field 的 getModifiers 方法返回一个 int 类型的值,表示该字段的修饰符
                // 1 public 2 private 4 protected 8 static 16 final 1024 abstract ...
                int mod = field.getModifiers();
                // 跳过静态 static 和 final 的变量
                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                    continue;
                }
                // 开启暴力反射,忽略访问权限修饰符的安全检查 (可以访问到 private 修饰的)
                field.setAccessible(true);
                // Field 设置值 set(obj, value)
                field.set(t, map.get(field.getName()));
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return t;
    }

编程题

  1. 将给出的单链表反转 e.g. 1-2-3-4-5 => 5-4-3-2-1

  2. 在字符串中找到第一个不重复的字符,如果每一个都重复,抛出运行时异常,允许使用集合类 e.g. “hellohehe” -> “o”

  3. 计算书籍的包月到期时间离指定时间还有多少分钟,不足60s的不计入 e.g.

    2020-02-01 12:00:00

    2020-02-01 12:01:00

    -> 1

压轴题

有N个用户其中存在朋友关系。如果A与B是朋友,B与C是朋友,ABC组成一个朋友圈。给出N个用户,计算其朋友圈数。第一行输入用户数N,第2到N+1行输入朋友间关系,1表示有关 e.g.

3

1,1,0

1,1,0

0,0,1 -> 2 (0,1)(2)

3

1,1,0

1,1,1

0,1,1 -> 1 (0,1,2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值