美文网首页程序员笔试面试题交流
程序员面试修炼03 | 京东2017笔试题

程序员面试修炼03 | 京东2017笔试题

作者: 淇奥qiaoqiao | 来源:发表于2018-05-09 09:19 被阅读32次

软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件过于复杂,没有明显的缺陷。 ——C.A.R.Hoare

image

名词解释

网络协议:计算机网络中进行数据交换而建立的规则、标准或约定的集合。例如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。当然,对于不相容终端,除了需变换字符集字符外还需转换其他特性,如显示格式、行长、行数、屏幕滚动方式等也需作相应的变换。

image

笔试/面试真题

题目描述(京东-2017)

尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题,现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示为三位数1、7、3,按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11,。 小B感兴趣的是,一个数A如果按2到A-1进制表达时,各个位数之和的均值是多少?她希望你能帮她解决这个问题?所有的计算均基于十进制进行,结果也用十进制表示为不可约简的分数形式。

输入描述:

输入中有多组测试数据,每组测试数据为一个整数A(1 ≤ A ≤ 5000).

输出描述:

对每组测试数据,在单独的行中以X/Y的形式输出结果。

输入例子:

5
3

输出例子:

7/3
2/1

解题思路

1、求一个数的从2进制开始到n-1进制表示时各个位数的数字相加和。

2、求各进制位数和的均值。用分数表示。

3、分数简化为最简分数,用最大公约数对分子分母进行约分。(辗转相除法)

下面来看JAVA解题代码(如果代码页面超出可以左右上下移动):

1.  import java.util.Scanner;  
2.    
3.  public class Main {  
4.      public static void main(String[] args) {  
5.          Scanner scanner = new Scanner(System.in);  
6.          while (scanner.hasNext()) {  
7.              int n = scanner.nextInt();  
8.              int sum = 0;  
9.              for (int i = 2; i < n; i++) {  
10.                int temp = n;  
11.                while (temp > 0) {  
12.                    sum += temp % i;  
13.                    temp /= i;  
14.                }  
15.            }  
16.            int gcd = getGcd(sum, n - 2);//最大公约数  
17.            System.out.println((sum / gcd) + "/" + ((n - 2) / gcd));  
18.        }  
19.    }  
20.  
21.    /** 
22.     * 辗转相除法求最大公约数 
23.     * 
24.     * @param a 分母 
25.     * @param b 分子 
26.     * @return 最大公约数 
27.     */  
28.    public static int getGcd(int a, int b) {  
29.        while (a % b != 0) {  
30.            int c = a % b;  
31.            a = b;  
32.            b = c;  
33.        }  
34.        return b;  
35.    }  
} 
image

技术知识点

TCP与UDP的理论区别

  • 基于连接与无连接——TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段

  • 对系统资源的要求(TCP较多,UDP少)——Tcp首部开销20字节,Udp首部开销小只有8个字节

  • UDP程序结构较简单——TCP的逻辑通信信道是全双工的可靠信道,UDP主机不需要维持复杂的链接状态表(这里面有许多参数)是不可靠信道;每条TCP连接只能有两个端点endpoint,每一条TCP连接只能点对点一对一,UDP支持一对一、一对多、多对一、多对多的交互通信(由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息);

  • **流模式与数据报模式 **——Tcp面向字节流,实际上是Tcp把数据看成一连串无结构的字节流;Udp面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,Udp没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低,对实时很有用,如IP电话、实时视频会议

  • TCP保证数据正确性,通过Tcp连接传送的数据,无差错、不丢失、不重复,且按序到达;UDP可能丢包,UDP不保证,同时也不使用拥塞控制。

image

免费领取

在公众号对话框内回复 【简历模版】, 即可获得小编精选的简历模版

image image

相关文章

网友评论

本文标题:程序员面试修炼03 | 京东2017笔试题

本文链接:https://www.haomeiwen.com/subject/inzgrftx.html