首页 > 编程知识 正文

腾讯程序三面笔试,腾讯内推三面经验分享

时间:2023-05-05 05:24:12 阅读:60782 作者:2978

文章目录一、自我介绍二、移动终端2.1 React优势2.2 TCP流量控制2.3图像格式jpg、gif、png2.4登录接口实现2.5前端与后端通信三、预估问题四、算法问题

一、自我介绍

个人背景、项目经验、实习经验。

二、移动终端2.1 React优势速度快

React引入了在JavaScript逻辑和实际DOM之间插入的virtual DOM概念,而不是直接操作DOM,性能很好。跨浏览器兼容

virtual DOM可解决浏览器之间的问题,并提供标准化的API。组件化

一切都是组件,代码更加模块化,代码易于重用,维护性强。单向数据流

Flux是一种用于在JavaScript APP应用程序中创建单向数据层的体系结构,随React视图库的开发而概念化为Facebook。同构、纯粹的javascript

由于搜索引擎爬行器程序依赖于服务端的响应而不是JavaScript的运行,因此预呈现APP应用程序有助于优化搜索引擎。兼容性好

使用RequireJS加载和打包时,Browserify和Webpack适用于构建大型APP应用程序。 确保艰巨的任务不会怕人。 2.2 TCP流量控制流量控制

即,控制发送侧的发送速率。

当双方正在通信时,发送侧的速度不一定等于接收侧的速度。 如果发送侧的发送速度过快,则接收侧无法处理。 在该情况下,接收侧仅在缓冲器中存在不能处理的数据(丢失了顺序的数据包也存储在缓冲器中)。 当缓冲区已满时,发送方又会沉迷于发送数据,而接收方只会丢弃收到的数据包。 大量丢包会严重浪费网络资源。 因此,需要控制发送端的发送速率,使接收端和发送端动态平衡。如何控制

接收端每次收到数据包时,发送ACK时,都可以同时向发送端传达自己的缓冲区有多少空闲。 剩下的大小称为接收窗口大小,接收窗口的大小用变量win表示。

通过在发送方收到后调整自己的发送速率,即调整自己的发送窗口的大小,发送方收到win=0后,发送方可以停止发送数据,防止大量丢包。何时再继续发送数据

策略:当接收方处理数据并收到窗口win0时,接收方会向发送方发送通知消息,告知发送方可以继续发送数据。 发送方在收到win0消息的情况下,继续发送数据。

但是,如果丢失了该消息,就会发生在接收方发送了通知消息之后,发送方继续等待数据的发送,发送方等待来自接收方的通知消息的问题,从而导致双方陷入僵局。

为了解决这个问题,还采用了另一种方法。 在发送方接收到接收窗口win=0时,发送方停止发送消息,同时开启定时器,每隔一定时间发送测试消息询问接收方是否能够继续发送数据,如果可能,接收方在此时的接收窗口之下如果接受窗口的大小仍然为0,发送方将再次更新启动计时器。 2.3图像格式jpg、gif、png JPG:颜色很多,可以压缩图像,不支持透明度。 通常用于存储照片等颜色丰富的图像。GIF:颜色较少、简单透明、支持视频,通常用于颜色单一或需要视频的图像。PNG:颜色数量众多,支持复杂的透明度,通常用于显示颜色复杂且要求透明的图像。 2.4实现登录界面2.5前端和后端通信通过GET提交数据。 在开机自检时提交数据。 使用第三方asynchttp客户端发送数据。 三、推断问题(一个商人骑着驴经过1000公里的沙漠,去卖3000根萝卜。 众所周知驴子一次要运1000根萝卜,但每走一公里就吃一根萝卜。:商人一共能卖多少根萝卜?

:商人卖得最多就等于驴吃得少,就等于驴走了最短的路。

驴子每走一公里就吃一根胡萝卜,所以尽量保持驴背上的胡萝卜最多,最后剩下的胡萝卜也最多; 另一方面,骑驴最多每段要满载1000匹驴背,每次必须背负1000匹,3000/1000=3,因此道路分为3段,中间需要有两个停靠点

假设第一个停靠点为A,从起点把3000根胡萝卜运到a点,驴子就会来回5趟(第一次回去1000,回去; 第二次1000,回去; 第三次1000,不用回去)。 第一个整数倍是2000。 也就是说,胡萝卜全部运到a点时,胡萝卜的总数为2000根。 所以,a分是吃了5次胡萝卜1000个的地方,也就是1000/5=200公斤的地方。

假设第二个停靠点为B,2000个胡萝卜从a到b是来回3次。 同样,b点设置在距离a点1000/3=333.3公里的地方。

因此驴子从b点出发向目的地出发时,还剩1000根胡萝卜。 距离为800-333=467公里,所以到达目的地后还剩1000-467=533条。

四.算法问题

小Q有n个数字,每次小Q选择任意两个不相同数字,并同时删去他们,最后能不能删完。

输入描述
第一行数字T,表示数据组数,对于每组数据,第一行一个数字N,表示数字个数,N一定是偶数,接下来一行N个数Ai,表示这些数字,满足2<=N<=1000000,1<=Ai<=N。

输出描述
对于每一组数据,输出YES或者NO表示是否可以删除所有的数字。

输入
1
6
1 2 3 4 5 6
输出
YES

输入
1
4
4 4 4 3
输出
NO

思路一:将所有数存入map,按value降序排序,将前两个的value-1,再排序,重复该步骤,当前两个value为0时,则删完。
思路二:只要出现次数最多的那一个数的出现次数小于等于一半就是YES,否则NO。

import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); for (int i = 0; i < t; i++) { int n = sc.nextInt(); HashMap<Integer, Integer> map = new HashMap<>(); for (int j = 0; j < n; j++) { int key = sc.nextInt(); int value = !map.containsKey(key) ? 1 : map.get(key) + 1; map.put(key, value); } int max = Integer.MIN_VALUE; for (Map.Entry<Integer, Integer> entry : map.entrySet()) { if (entry.getValue() > max) { max = entry.getValue(); } } if (max <= n / 2) { System.out.println("YES"); } else { System.out.println("NO"); } } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。