前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔试题中的陷阱在哪

笔试题中的陷阱在哪

原创
作者头像
编程思维
发布2023-01-26 14:12:15
6340
发布2023-01-26 14:12:15
举报

1. 小镇做题家还会怕笔试?

应聘进入一家企业,除了面试,往往还有笔试环节。

作为考试最卷的国家之一,每一位同学都是从小考到大,可谓身经百战。

老师在学校也经常会帮同学们划个重点什么的。

代码语言:javascript
复制
老师:“这题3分,送分题”

老师:“这题必考,每年都有”

老师:“这个知识点了解就可以了”

但走出校园,就没有那么好的老师帮你划重点了。

而且技术发展日新月异,新知识根本学不过来。

面试题汇总可以去公主号thisjava。

2. 重点怎么找?

其实技术万变不离其中,最核心的关键点,也就是我们常听到的底层逻辑,都是相对不变的。

比如计算机的几大要素:CPU、内存、IO设备等等。

而编程语言也是一样。

2.1 以Java为例,什么是基础?

那必然是JavaSE

每一个Java Dev 必须掌握的知识

无非是

代码语言:javascript
复制
byte short int long float double char boolean

java.lang 

java.util 

java.io 

java.sql 

java.math 

java.time 等等

有的同学简历里写着阅读过java、linux等源代码,

其实大可不必这么复杂,源代码阅读是非常费精力的,

像什么21天学会Java,3个月精通,都不现实。

新手入门,首先该会用的知识都不能少,即前面提到的那些,

另外还需要避开一些坑的地方

这些坑往往和常识相违背,容易对新手造成困扰。

3. 我是新手吗?

请听题:请用普通话朗读下面的语句

代码语言:javascript
复制
世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

发现了吗?

结合语境,如果你读“十种人”,说明你还是个麻瓜。

程序员思维里,这句话读“二种人”

因为 10 是 二进制的 2


记住

读过的书,走过的路,遇过的人

这些就构成了你的人生格局

4. 笔试陷阱

下面我们给出一些示范

注意,他们在 Java 语言里

与我们所了解的常识都格格不入

4.1 认识小数的四则运算

有同学看到这里就炸了

你是侮辱我的智商吗?

小学四年级的题你考我?

别急,让我们看一个例子

代码语言:javascript
复制
    // 请写出以下问题的答案:
    System.out.println( 0.2 + 0.7 );

看完有的宝宝就生气了,这不就 0.9 吗?

不是的话我跪着吃翔!


还真不是,执行一下程序,结果是

代码语言:javascript
复制
0.8999999999999999

为什么

因为在浮点数默认是double类型

在double运算方面,你可以认为计算机是个智障。

不信你再试试 0.1 + 0.2,结果居然是

代码语言:javascript
复制
    0.30000000000000004

再试试 0.4 + 0.5,结果居然是

代码语言:javascript
复制
    0.9

这属于完全没规律的情况了,

数字可能正确,可能偏大、可能偏小,而且差值都不一样。


所以这类问题,在Java里都属于模糊的范畴,想要和常识一致,

需要使用BigDecimal类,用于浮点数的精确计算

代码语言:javascript
复制
    BigDecimal a=new BigDecimal("0.2");
    BigDecimal b=new BigDecimal("0.1");
    System.out.println(a.add(b));

    // 输出 0.3

这里有几个要点:

  1. 构造参数必须是字符串格式的数字
  2. 加减乘除,要用 add,subtract,multiply,divide

具体可以参考 java.math 包,里面还有个 BigInteger类似

发现了吧,第一个坑就如此脑残

别急,后面还有。

4.2 认识整数的四则运算

又有宝宝生气了,

刚才还是小数,现在降格到整数了,

这是一年级还是幼儿园水平啊?

别急,看看下面的这个题目,说出答案:

代码语言:javascript
复制
    123+32l

绝对不是侮辱智商

如果你脱口而出 444,那就说明还没进入状态

试想面试会问这么低端的问题?

坑在哪

正确答案是 155

其实这也没什么技巧,

主要考察的是视力有没有5.0

注意审题 123 + 32l

32后面的字是小写的L,不是1

也就是说,题目问的是 123 加 长整形的 32,

结果是不是155?

必须是


这也给我们自己一个警示,写这种代码,请务必大写

123 + 32L,不然就是给你的同事挖坑

类似的在Java语言里还有 f 和 F,浮点数float

这里相加时,会隐式转换,int和long相加,结果是long

说穿了,也不难,就是想没想到这一层。

所以,大家编码写变量的时候,请最好不要用 o O l 这些符号,

数字和字母很难分得清。

4.3 字符串连接问题

来个简单的,请写出以下问题的答案

代码语言:javascript
复制
    System.out.println(1 + 2 + "3" + 4 + 5);
    System.out.println("1" + 2 + 3 + 4 + 5);
    System.out.println(1 + 2.0 + "3" + 4.0 + 5);
    System.out.println("1" + 2 + 3.0 + 4 + 5);

答案无非是几种,字符串连接,数字加减等等

先看看答案,看各位猜的对不对


第一行:

代码语言:javascript
复制
    System.out.println(1 + 2 + "3" + 4 + 5);
    // 打印 3345

因为开头的 1+2 都是数字,因此是int的加法

然后遇到了 3 + “3”,运算符两侧有一个是String,就变成了String连接

再后面是 “33” + 4, 还是字符串连接

最后 “334”+5,还是字符串连接

结果 3345


第二行:

代码语言:javascript
复制
    System.out.println("1" + 2 + 3 + 4 + 5);
    // 打印 12345

因为开头就是 “1”+2,整个运算的方式都是字符串连接

因此每一步运算依次是 “12”,“123”,“1234”,“12345”


第三行

代码语言:javascript
复制
    System.out.println(1 + 2.0 + "3" + 4.0 + 5);
    // 打印 3.034.05

这里有变化了,1+2.0,会被视为 int + double,因此会转为double

结果是 3.0,然后 3.0+“3”,变成了 “3.03”

然后 “3.03” + 4.0,变成了 “3.034.0”

最后 +5,结果是 3.034.05


第四行

代码语言:javascript
复制
    System.out.println("1" + 2 + 3.0 + 4 + 5);
    // 打印 123.045

有了第三题的基础,这个就容易了,唯一的变数是中间的double型 3.0

结果是123.045


这里额外说一个点,就是float和double的区别

在Java里默认是double,如果声明float要在结尾加F

例如

代码语言:javascript
复制
    double a=1.23;
    float b=1.23F;

他们主要区别是位数,float是32位,而double是64位

因此能的数据范围不同

double范围更大,-1.79E+308~-1.79E+308

因此建议大部分开发者,搞不清楚就只用double就行了


讲完以上问题可以发现

很多问题看似简单

但在程序界,有着完全不同的理解

这就是普通人和程序员思维上最大的不同

你的眼界决定你的格局

更多时候困住你的不是你眼前的一切

而是你目光所及之处,根本看不见

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 小镇做题家还会怕笔试?
  • 2. 重点怎么找?
  • 2.1 以Java为例,什么是基础?
  • 3. 我是新手吗?
  • 4. 笔试陷阱
  • 4.1 认识小数的四则运算
  • 为什么
  • 4.2 认识整数的四则运算
  • 坑在哪
  • 4.3 字符串连接问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com