建信金科与电信北京研究院安全岗面试体验与技术总结

在求职过程中,参加了建信金科的笔试和电信北京研究院安全岗的一面,这两个经历都让我收获颇丰。下面将详细分享这两次经历以及相关技术问题的总结。

以下是对建信金科笔试部分内容的进一步扩展和分析:

一、建信金科笔试

(一)选择题部分深度分析

  1. Java 相关题目

    • 面向对象三大特性
      • 封装:将数据和操作封装在类中,通过访问修饰符控制外部对类内部成员的访问,提高了代码的安全性和可维护性。例如,将一些敏感数据设置为私有属性,并通过公共方法提供有限的访问权限。
      • 继承:允许子类继承父类的属性和方法,实现代码的复用。例如,创建一个动物类作为父类,然后创建猫、狗等子类继承动物类的一些通用属性和行为。
      • 多态:同一操作作用于不同的对象可以有不同的表现形式。比如,定义一个方法接收父类类型的参数,实际传入不同的子类对象时,会根据子类的具体实现执行不同的行为。
    • 线程同步机制
      • synchronized 关键字:可以用于修饰方法或代码块,确保在同一时刻只有一个线程访问被修饰的部分。例如,在多线程环境下对共享资源的访问进行同步,防止数据不一致。
      • Lock 接口:提供了比 synchronized 更灵活的锁机制,可以实现尝试获取锁、中断等待锁等功能。例如,使用 ReentrantLock 实现更加复杂的同步逻辑。
  2. 数据库题目

    • 数据库规范化设计
      • 目的是减少数据冗余、提高数据的一致性和完整性。例如,将一个包含重复数据的表拆分为多个表,通过外键关联起来,避免数据的重复存储。
      • 常见的规范化级别有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
    • SQL 语句操作
      • 查询(SELECT):可以使用各种条件筛选数据、进行排序、分组等操作。例如,使用 WHERE 子句筛选满足特定条件的数据,使用 ORDER BY 子句对结果进行排序。
      • 插入(INSERT):向表中插入新的数据行。需要指定插入的列和对应的值。例如,INSERT INTO table_name (column1, column2) VALUES (value1, value2)。
      • 更新(UPDATE):修改表中已有的数据。可以使用 WHERE 子句指定要更新的行。例如,UPDATE table_name SET column1 = new_value WHERE condition。
      • 删除(DELETE):删除表中的数据行。同样可以使用 WHERE 子句指定要删除的行。例如,DELETE FROM table_name WHERE condition。
  3. 网络安全题目

    • SQL 注入防范措施
      • 输入验证:对用户输入的数据进行严格的验证和过滤,确保输入的数据符合预期的格式和类型。例如,使用正则表达式对输入的字符串进行验证。
      • 参数化查询:使用参数化查询而不是拼接 SQL 语句,可以防止恶意用户注入 SQL 代码。例如,在使用 JDBC 进行数据库操作时,使用 PreparedStatement 进行参数化查询。
      • 最小权限原则:确保数据库用户只具有完成其任务所需的最小权限。避免使用具有过高权限的数据库用户进行应用程序的操作。
    • 网络通信安全保护措施
      • 使用加密技术:如 SSL/TLS 加密协议,确保数据在网络传输过程中的机密性。例如,在 Web 应用中使用 HTTPS 协议来加密客户端和服务器之间的通信。
      • 身份验证和授权:对用户进行身份验证,确保只有合法用户能够访问系统。同时,根据用户的角色和权限进行授权,限制用户对资源的访问。例如,使用用户名和密码进行身份验证,使用基于角色的访问控制(RBAC)进行授权。
      • 网络防火墙:设置网络防火墙,限制外部对内部网络的访问,防止恶意攻击。可以根据 IP 地址、端口号等规则进行过滤。
  4. 计算机网络题目

    • TCP/IP 协议栈工作原理
      • TCP/IP 协议栈分为四层:网络接口层、网络层、传输层和应用层。
      • 网络接口层负责将数据帧在物理网络上传输。网络层使用 IP 协议进行路由和寻址。传输层使用 TCP 和 UDP 协议提供可靠的数据传输和不可靠的数据传输服务。应用层则包含各种应用协议,如 HTTP、FTP、SMTP 等。
    • IP 地址划分
      • IP 地址分为 IPv4 和 IPv6 两种。IPv4 地址由 32 位二进制数组成,通常表示为点分十进制形式。IPv6 地址由 128 位二进制数组成,通常表示为十六进制形式。
      • 根据子网掩码可以将 IP 地址划分为网络地址和主机地址两部分。通过子网划分可以将一个大的网络划分为多个小的子网,提高网络的管理效率和安全性。

(二)编程题部分深入探讨

以下是对建信金科笔试编程题部分以问题、文字解答和代码解答的方式呈现:

一、第一道编程题

问题:给定一个链表,求至少去除多少个链表元素使得所有链表元素值都相同。

文字解答

  • 首先考虑边界情况,如果链表为空或者只有一个元素,直接返回 0。
  • 然后遍历链表,使用哈希表(如 Java 中的 HashMap)统计不同元素值出现的次数。
  • 找出出现次数最多的元素值。
  • 最后计算需要去除的元素个数,即链表总长度减去出现次数最多的元素值的出现次数。

代码解答(Java 示例)

class ListNode {
    int val;
    ListNode next;
    ListNode(int val) {
        this.val = val;
    }
}

public class RemoveElementsForSameValue {
    public static int removeElements(ListNode head) {
        if (head == null) {
            return 0;
        }
        if (head.next == null) {
            return 0;
        }
        java.util.Map<Integer, Integer> countMap = new java.util.HashMap<>();
        ListNode current = head;
        while (current!= null) {
            countMap.put(current.val, countMap.getOrDefault(current.val, 0) + 1);
            current = current.next;
        }
        int maxCount = 0;
        int maxValue = 0;
        for (java.util.Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            if (entry.getValue() > maxCount) {
                maxCount = entry.getValue();
                maxValue = entry.getKey();
            }
        }
        int totalCount = 0;
        current = head;
        while (current!= null) {
            totalCount++;
            current = current.next;
        }
        return totalCount - maxCount;
    }
}

二、第二道编程题

问题:给定一个链表,将链表在偶数位置的值合并到前一个值或后一个值,但题目描述不够明确,如何确定合并规则并实现该功能?

文字解答

  • 首先分析题目理解难点,由于题目描述中对偶数位置的值合并要求不明确,我们可以假设优先合并到前一个值。如果前一个值不存在或者有特定限制(如前一个值已达到某个条件不能再合并),则考虑合并到后一个值。
  • 在遍历链表过程中,维护前一个节点和当前节点的指针。判断当前节点位置是否为偶数,如果是偶数位置,则根据合并规则进行值的合并操作。
  • 对于边界情况,如链表的头节点为偶数位置时,创建一个虚拟头节点可以简化处理。

代码解答(Java 示例)

class ListNode {
    int val;
    ListNode next;
    ListNode(int val) {
        this.val = val;
    }
}

public class MergeEvenPositionValues {
    public static ListNode mergeEvenPositions(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode prev = dummy;
        ListNode current = head;
        int position = 1;
        while (current!= null && current.next!= null) {
            if (position % 2 == 0) {
                int mergedValue = prev.next.val + current.val;
                prev.next.val = mergedValue;
                current = current.next;
            } else {
                prev = prev.next;
                current = current.next;
            }
            position++;
        }
        return dummy.next;
    }
}

二、电信北京研究院安全岗一面

(一)面试流程

投递的安全运营和攻防研究岗位,一面于下午 2 点开始,提前进入会议室后提前开始面试,总时长大概 40 分钟。自己需要开启视频,但两个面试官不开视频。

(二)面试问题及答案

  1. 自我介绍
    简要介绍自己的教育背景、专业技能、项目经验和对安全领域的兴趣。

  2. 问简历项目,渗透的思路
    根据自己在简历中提到的渗透测试项目,阐述渗透测试的整个流程和思路。

    回答示例

    • 首先进行信息收集,包括目标系统的域名、IP 地址、开放的端口和服务等。
    • 然后进行漏洞扫描,使用各种漏洞扫描工具查找可能存在的安全漏洞。
    • 针对发现的漏洞进行进一步的分析和利用,尝试获取系统的权限。
    • 最后进行后渗透测试,包括收集敏感信息、扩大权限等。
  3. 结合实际工作讲讲 SQL 注入
    解释 SQL 注入的原理、危害以及在实际工作中的防范措施。

    回答要点

    • 原理:SQL 注入是通过在用户输入的数据中插入恶意的 SQL 语句,从而欺骗数据库服务器执行这些恶意语句。
    • 危害:可能导致数据泄露、数据篡改、权限提升等严重后果。
    • 防范措施:对用户输入进行严格的过滤和验证,使用参数化查询,避免拼接 SQL 语句等。
  4. HTTPS 和 HTTP 有什么不同?TLS 是怎么实现的?

    • HTTPS 和 HTTP 的不同:

      • HTTPS 是在 HTTP 的基础上增加了 SSL/TLS 加密层,保证了数据传输的安全性。
      • HTTP 是明文传输,容易被窃听和篡改;HTTPS 则通过加密保证了数据的机密性和完整性。
      • HTTPS 的默认端口是 443,而 HTTP 的默认端口是 80。
    • TLS 的实现方式:

      • TLS 协议通过握手过程在客户端和服务器之间建立安全连接。
      • 握手过程中,双方协商加密算法、交换密钥等。
      • 然后使用协商好的加密算法对数据进行加密传输。
  5. TCP 三次握手
    描述 TCP 三次握手的过程。

    回答要点

    • 第一次握手:客户端向服务器发送一个 SYN 包,请求建立连接。
    • 第二次握手:服务器收到 SYN 包后,向客户端回复一个 SYN/ACK 包,表示收到请求并同意建立连接。
    • 第三次握手:客户端收到 SYN/ACK 包后,向服务器回复一个 ACK 包,表示确认建立连接。
  6. 文件上传的挖掘和利用思路?
    阐述文件上传漏洞的挖掘和利用方法。

    回答示例

    • 挖掘思路:
      • 测试不同的文件类型上传,看是否存在文件类型过滤不严的问题。
      • 尝试上传恶意文件,如 webshell、可执行文件等,看是否能够成功上传。
    • 利用思路:
      • 如果成功上传恶意文件,可以通过访问该文件来执行恶意代码,获取服务器的权限。
      • 或者利用文件上传漏洞上传一个后门程序,以便后续的渗透测试。
  7. 怎么绕 CDN?
    介绍绕过 CDN 的方法。

    回答要点

    • 通过查询域名的历史解析记录,找到真实的 IP 地址。
    • 利用子域名查询,有些子域名可能没有使用 CDN。
    • 利用网络漏洞扫描工具,扫描目标网站的开放端口,可能会发现没有经过 CDN 的服务器。
  8. 讲讲你对安全运营的了解?
    谈谈对安全运营的理解和认识。

    回答示例

    • 安全运营是指通过一系列的技术和管理手段,保障企业或组织的信息系统的安全。
    • 包括安全监控、漏洞管理、事件响应、安全培训等方面。
    • 安全运营的目标是及时发现和处理安全事件,降低安全风险,保护企业的资产和声誉。
  9. 在学校关于网络的课程讲什么?
    根据自己在学校学习的网络课程内容进行回答。

    回答示例

    • 可能包括计算机网络的体系结构、网络协议、网络安全等方面的知识。
    • 例如,讲解 TCP/IP 协议栈的工作原理、网络层的 IP 地址和路由、传输层的 TCP 和 UDP 协议等。
    • 还可能涉及网络安全的基本概念、常见的安全威胁和防范措施等。
  10. 现在在做的项目?详细解释一下
    介绍自己目前正在进行的项目,包括项目的背景、目标、技术架构和自己在项目中的角色和贡献。

(三)反问环节

在面试的最后,可以向面试官提出一些问题,例如:

  • 岗位的具体职责和发展前景。
  • 团队的技术栈和工作氛围。
  • 公司对安全岗位的重视程度和投入。

三、总结与反思

通过这两次经历,我深刻认识到在安全领域的求职中,不仅需要扎实的技术基础,还需要良好的沟通能力和问题解决能力。在准备面试时,要对常见的安全技术问题有深入的理解和掌握,同时要能够将自己的项目经验清晰地表达出来。对于笔试中的编程题,要注意理解题目要求,提高代码的质量和效率。在未来的学习和实践中,我将继续努力提升自己的技术水平和综合素质,为进入理想的安全岗位做好充分的准备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值