9月1日投的,15日笔试,26日一面。这个公司是在国聘行动上投递的,在成都就这一个岗位,本来没抱希望投的,结果没想到还给面试了。面试在腾讯会议上的,一共25分钟左右,比较短;感觉有点凉,像kpi面,我准备了kafka的很多八股,结果一个没问,一直在怼网络,感觉有点像kpi面试。
以下回答绝大部分是GPT4.0回答的,我看着没太大问题就贴上来了,仅供参考,可能有些错误。
HTTP 是一个请求-响应协议。虽然它基于 TCP,这是一个全双工的协议,但 HTTP 本身是设计为一个简单的、无状态的协议,主要用于文档的检索和信息的发布。因此,HTTP 的主要模式是客户端发送一个请求,服务器返回一个响应。
现在我们详细分析这个问题:
综上所述,尽管 TCP 是全双工的,但 HTTP 的设计选择和其应用场景使其主要成为一个请求-响应模型。为了满足实时双向通信的需求,WebSocket 协议被引入为一个单独的、完全不同于 HTTP 的协议。
对
可以看小林coding的这篇3.9 既然有 HTTP 协议,为什么还要有 WebSocket? | 小林coding (xiaolincoding.com)。
代码
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) } }
直接贴代码了,用Callable+submit()后得到的Future对象进行get()api的调用或者直接使用FutureTask也可以。这里我没有回答好,只知道使用get()
调用,但是不知道具体是在哪个对象上进行get()。
记住,我们要获取返回值的时候,需要用get()方法,这个get()方法是Future
接口内的,那么实现了Future
借口的对象怎么来?
Callable
对象,之后会返回一个Future
,对它调用get()
即可Future
借口的实现类,FutureTask
,只不过使用它之后,放入线程池中执行就只需要用execute()
方法,不能用submit()
了。因为当您传入一个FutureTask
到submit
方法中,其实是调用了另一个重载版本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(); }
数组、链表、树、图、栈、队列、双端队列、哈希表等等
快慢指针
栈(Stack)是一个后进先出(LIFO)的数据结构,有很多实际应用场景。以下是一些常见的应用场景以及详细的说明:
这些只是栈的几个应用场景。由于其简单且高效的性质,栈在计算机科学和其他领域中有着广泛的应用。
10和11让我感觉kpi的味道很浓了,感觉面试官从第7个我没答好的问题开始就有点失去兴趣了,哎
TCP/IP 并不是指一个单独的协议,而是一个协议族或者说是一个协议套件。这个协议族中包含了多个层次和类型的协议。其名称中的“TCP”和“IP”分别是传输控制协议(TCP)和互联网协议(IP),这两个是这个协议族中最著名的协议,但实际上,TCP/IP协议族包含了更多的协议。
TCP/IP 模型大致可以分为以下四个层次:
因此,说 TCP/IP 是“几个”协议其实不准确。它是一个包含了许多协议的协议族,而这些协议都服务于不同的目的和功能。
电信智科是中国电信的分公司,是专门做AI,大模型的。成都团队主要做大数据相关的,工作有很多种,开发、算法都有,需要进去之后再看(感觉这句话挺敷衍的hhhh)。
我不能给你什么建议。
绝了,第一家啥建议也给不到俺的公司,哪怕客套话也不说,感觉是明着kpi了,面试的时候对面也挺吵的,也没开摄像头。
也可能是自己太菜了,不能让面试官感兴趣吧hhhh