电信智科-大数据开发运营工程师(成都base)面经

电信智科(中国电信股份有限公司数字智能科技分公司)-大数据开发运营工程师面经

​ 9月1日投的,15日笔试,26日一面。这个公司是在国聘行动上投递的,在成都就这一个岗位,本来没抱希望投的,结果没想到还给面试了。面试在腾讯会议上的,一共25分钟左右,比较短;感觉有点凉,像kpi面,我准备了kafka的很多八股,结果一个没问,一直在怼网络,感觉有点像kpi面试。

​ 以下回答绝大部分是GPT4.0回答的,我看着没太大问题就贴上来了,仅供参考,可能有些错误。

1.前后端分离的项目中,前端往后端发送http请求过程中发生了什么?

2.http基于TCP这个全双工的协议,为什么基本上都是客户端请求服务端,服务端返回数据这种半双工的模式呢?

HTTP 是一个请求-响应协议。虽然它基于 TCP,这是一个全双工的协议,但 HTTP 本身是设计为一个简单的、无状态的协议,主要用于文档的检索和信息的发布。因此,HTTP 的主要模式是客户端发送一个请求,服务器返回一个响应。

现在我们详细分析这个问题:

  1. HTTP的设计初衷:HTTP 最初的设计是为了文档的检索和信息的发布,它并不是为双向实时通信设计的。所以,尽管 TCP 支持全双工模式,HTTP 在设计时选择了请求-响应模型,即半双工模式。
  2. 无状态性:HTTP 是无状态的。每一个请求-响应对都是独立的。这简化了服务端的设计和实现,因为服务端不需要维护与客户端之间的长时间连接状态。
  3. 长轮询和服务器推送:在 HTTP/1.1 下,尽管主要的模式是请求-响应,但也可以通过技巧如长轮询来模拟服务器向客户端的推送。但这并不是真正的全双工通信。
  4. HTTP/2 的服务器推送:HTTP/2 引入了服务器推送功能。这允许服务器在没有客户端明确请求的情况下发送数据。然而,这仍然是在请求-响应模型的上下文中,只是提供了更高效的方式来预先推送可能需要的资源。
  5. WebSocket:WebSocket 是一个不同的协议,尽管它从 HTTP 升级而来。它提供了真正的全双工通信能力,允许服务器和客户端之间的双向实时通信。与 HTTP 相比,WebSocket 更适合需要实时交互和低延迟的应用,例如在线聊天、游戏和实时数据流。

综上所述,尽管 TCP 是全双工的,但 HTTP 的设计选择和其应用场景使其主要成为一个请求-响应模型。为了满足实时双向通信的需求,WebSocket 协议被引入为一个单独的、完全不同于 HTTP 的协议。

3.http1.1协议下,如果要双向互动的话,只能升级到websocket吗?

4.http协议升级到websocket的过程简述一下。哪个响应码是协议升级?(101)

可以看小林coding的这篇3.9 既然有 HTTP 协议,为什么还要有 WebSocket? | 小林coding (xiaolincoding.com)

5.多线程在平时用过吗?简述一下场景

6.在kotlin中如何开启协程的?StateFlow是如何使用的?

代码

fun main() {
    GlobalScope.launch(context = Dispatchers.IO) {
        //延时一秒
        delay(1000)
        log("launch")
    }
    //主动休眠两秒,防止 JVM 过快退出
    Thread.sleep(2000)
    log("end")
}

​ 用的比较多的协程作用域是coroutineScope;StateFlow就是一个热流,可以对新来的数据进行回调操作。

private suspend fun test() {
    // 创建一个热流,初始值为1
    val flow = MutableStateFlow(1)

    // 将MutableStateFlow对象转换为StateFlow对象
    // StateFlow对象不能调用emit方法,因此只能用于接收
    val onlyReadFlow = flow.asStateFlow()

    // 接收者1
    // 启动一个新的协程
    GlobalScope.launch {
        // 触发并处理接收的数据
        onlyReadFlow.collect {
            Log.d("liduozuishuai", "test1: $it")
        }
    }

    // 接收者2
    // 启动一个新协程
    GlobalScope.launch {
        // 订阅监听,当collect方法触发订阅时,会首先会调onSubscription方法
        onlyReadFlow.onSubscription {
            Log.d("liduozuishuai", "test2: ")
            // 发射数据:2
            // 向下游发射数据:2,其他接收者收不到
            emit(2)
        }.onEach {
            // 处理接收的数据
            Log.d("liduozuishuai", "test2: $it")
        }.collect()
    }

    // 发送数据:3,多次发送
    GlobalScope.launch {
        flow.emit(3)
        flow.emit(3)
        flow.compareAndSet(3, 3)
    }
}

7.说一下Java如何从线程中取返回值?

直接贴代码了,用Callable+submit()后得到的Future对象进行get()api的调用或者直接使用FutureTask也可以。这里我没有回答好,只知道使用get()调用,但是不知道具体是在哪个对象上进行get()。

​ 记住,我们要获取返回值的时候,需要用get()方法,这个get()方法是Future接口内的,那么实现了Future借口的对象怎么来?

  1. 通过线程池(submit)提交Callable对象,之后会返回一个Future,对它调用get()即可
  2. 直接通过Future借口的实现类,FutureTask,只不过使用它之后,放入线程池中执行就只需要用execute()方法,不能用submit()了。因为当您传入一个FutureTasksubmit方法中,其实是调用了另一个重载版本submit(Runnable task),这个版本的submit方法并不关心Runnable是否是一个FutureTask或是否有返回值。

代码如下:

 public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<Integer> ft = new FutureTask<>(()->{
            int i = 0 ;
            for(;i<10;i++){
                System.out.println(Thread.currentThread().getName() + "的循环变量i的值 :" + i);
            }
            return i;
        });
        ThreadPoolExecutor tpe = new ThreadPoolExecutor(5,10,10
                , TimeUnit.SECONDS,new ArrayBlockingQueue<>(10), new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(null,r,"这是一个有返回值的线程");
            }
        },new ThreadPoolExecutor.CallerRunsPolicy());
        tpe.execute(ft);
        System.out.println(ft.get());

        Callable<Integer> callable = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                System.out.println("callable开始执行");
                int i = 0 ;
                for(;i<10;i++){
                    System.out.println(Thread.currentThread().getName() + "的循环变量i的值 :" + i);
                }
                return i;
            }
        };
        Future<Integer> submit = tpe.submit(callable);
        System.out.println(submit.get());
        tpe.shutdown();

    }

8.知道的数据结构说一下

数组、链表、树、图、栈、队列、双端队列、哈希表等等

9.如何判断一个链表中是否有环?

快慢指针

10. 说一下栈的应用场景

栈(Stack)是一个后进先出(LIFO)的数据结构,有很多实际应用场景。以下是一些常见的应用场景以及详细的说明:

  1. 函数调用/方法执行:在程序中,每当有一个函数或方法被调用,系统会将调用信息(如返回地址、局部变量等)压入系统调用栈中。当函数执行完毕并返回时,系统从调用栈中弹出该函数的调用信息,继续执行前一个函数。举例:考虑递归函数。例如,计算斐波那契数列。每次函数递归调用自己,都会将当前的计算状态保存在栈中。
  2. 表达式求值:栈用于解析和计算算术表达式,特别是当它们有不同的优先级时。举例:使用两个栈,一个用于值和另一个用于运算符,来实现后缀(逆波兰)表示法或将中缀表达式转换为后缀表达式。
  3. 括号匹配:栈可以帮助检查括号、大括号、方括号等在代码或表达式中是否正确匹配。举例:检查字符串“{[()]}”中的括号是否匹配。每次遇到左括号时压入栈,遇到右括号时从栈中弹出并检查是否匹配。
  4. 后退功能:在浏览器或软件中的后退功能,可以使用栈来实现。每次用户访问新页面或状态时,当前页面/状态被压入栈中。点击后退时,最近的页面/状态从栈顶被弹出。举例:浏览器历史功能。当你浏览新的网页时,之前的网页地址被压入栈。点击后退按钮时,返回栈顶的网页。
  5. 撤销操作:在许多应用程序中(如文字处理器或图形编辑器),栈可以用来实现撤销功能。每次更改都被压入栈中。要撤销更改,只需从栈顶弹出操作。举例:在Microsoft Word中,当你删除文本或添加格式时,每个更改都被保存在栈中。使用撤销功能时,可以逐步回退到之前的状态。
  6. 深度优先搜索:在图形或树形结构中,深度优先搜索可以使用栈来实现。举例:考虑一个迷宫问题。从起点开始,你可以使用栈来存储访问路径。每次都走可能的路径,如果到达死胡同,则从栈中弹出上一步并尝试其他路径。

这些只是栈的几个应用场景。由于其简单且高效的性质,栈在计算机科学和其他领域中有着广泛的应用。

11.说一下树的应用场景

10和11让我感觉kpi的味道很浓了,感觉面试官从第7个我没答好的问题开始就有点失去兴趣了,哎

12.TCP/IP是几个协议?

​ TCP/IP 并不是指一个单独的协议,而是一个协议族或者说是一个协议套件。这个协议族中包含了多个层次和类型的协议。其名称中的“TCP”和“IP”分别是传输控制协议(TCP)和互联网协议(IP),这两个是这个协议族中最著名的协议,但实际上,TCP/IP协议族包含了更多的协议。

TCP/IP 模型大致可以分为以下四个层次:

  1. 应用层:这一层包含了各种应用层协议,如 HTTP, FTP, SMTP, DNS 等。
  2. 传输层:这一层主要有两个协议,即 TCP 和 UDP(用户数据报协议)。
  3. 网络层:主要协议是 IP,但还包括如 ICMP(互联网控制消息协议)、IGMP(互联网组管理协议)等其他协议。
  4. 链路层:这一层并没有特定的协议定义在 TCP/IP 协议族中,但是这一层主要负责与具体的物理网络相交互,如 Ethernet。

因此,说 TCP/IP 是“几个”协议其实不准确。它是一个包含了许多协议的协议族,而这些协议都服务于不同的目的和功能。

13.TCP协议和IP协议的关系?

14.包粘粘问题说一下

15.k8s说一下

反问:

1.公司是做什么的?

​ 电信智科是中国电信的分公司,是专门做AI,大模型的。成都团队主要做大数据相关的,工作有很多种,开发、算法都有,需要进去之后再看(感觉这句话挺敷衍的hhhh)。

2.能给我什么建议吗?

​ 我不能给你什么建议。

​ 绝了,第一家啥建议也给不到俺的公司,哪怕客套话也不说,感觉是明着kpi了,面试的时候对面也挺吵的,也没开摄像头。

也可能是自己太菜了,不能让面试官感兴趣吧hhhh

全部评论
哈喽有说啥时候给结果吗,我上周面的说这周出结果,然后到今天都没信😭
点赞 回复 分享
发布于 2023-09-27 11:27 陕西
双九吗
点赞 回复 分享
发布于 2023-10-05 14:57 四川
佬,可以透露下笔试是什么题库吗?我投的数据岗,给我发笔试链接了
点赞 回复 分享
发布于 2023-10-10 16:44 湖北
佬还记得笔试内容吗?😂
点赞 回复 分享
发布于 2023-10-11 16:30 北京
明天面试,请问基本都是问的技术问题吗
点赞 回复 分享
发布于 2023-11-09 22:37 重庆

相关推荐

object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
16 48 评论
分享
牛客网
牛客企业服务