笔试的时候我居然踩了坑

简介: 笔试的时候我居然踩了坑

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

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

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

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

老师:“这题3分,送分题”
老师:“这题必考,每年都有”
老师:“这个知识点了解就可以了”

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

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

2. 重点怎么找?

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

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

而编程语言也是一样。

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

那必然是JavaSE

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

无非是

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. 我是新手吗?

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

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

发现了吗?

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

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

因为 10 是 二进制的 2


记住

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

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

4. 笔试陷阱

下面我们给出一些示范

注意,他们在 Java 语言里

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

让我们从小学数学开始学习编程

4.1 认识小数的四则运算

有同学看到这里就炸了

你是侮辱我的智商吗?

小学四年级的题你考我?

别急,让我们看一个例子

// 请写出以下问题的答案:
    System.out.println( 0.2 + 0.7 );

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

不是的话我跪着吃翔!


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

0.8999999999999999

为什么

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

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

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

0.30000000000000004

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

0.9

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

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


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

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

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 认识整数的四则运算

又有宝宝生气了,

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

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

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

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 字符串连接问题

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

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);

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

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


第一行:

System.out.println(1 + 2 + "3" + 4 + 5);
    // 打印 3345

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

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

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

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

结果 3345


第二行:

System.out.println("1" + 2 + 3 + 4 + 5);
    // 打印 12345

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

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


第三行

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


第四行

System.out.println("1" + 2 + 3.0 + 4 + 5);
    // 打印 123.045

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

结果是123.045


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

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

例如

double a=1.23;
    float b=1.23F;

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

因此允许的数据范围不同

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

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


讲完以上问题可以发现

很多问题看似简单

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

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

你的眼界决定你的格局

相关文章
|
11月前
|
编译器 C语言
【面试笔试避坑指南】一
【面试笔试避坑指南】一
55 0
|
SQL 算法 Java
第一次笔试【面试】
第一次笔试【面试】
111 0
|
设计模式 NoSQL 算法
“2023金三银四”又来了,关于面试,你需要知道的这些事
没有跳不了的槽,只有没用心的人,2023最新后端岗位面试真题+简历包装。
103 0
“2023金三银四”又来了,关于面试,你需要知道的这些事
|
存储 C语言
【校招面经】8道指针面试真题,快来检测自己掌握了几道。
【校招面经】8道指针面试真题,快来检测自己掌握了几道。
【校招面经】8道指针面试真题,快来检测自己掌握了几道。
|
缓存 前端开发 JavaScript
金三银四百度前端实习面经
金三银四百度前端实习面经
求职准备 | 准备简历和面试时最容易踩哪些坑
很多人面试完,心里都会想说:“哎呀,刚才那道题目,这样回答就好了!”,2020年4月,工作3年的我通过社招进入阿里云,通过这篇文章,把对于如何面试的思考分享给你。
10819 2
求职准备 | 准备简历和面试时最容易踩哪些坑
|
消息中间件 SQL NoSQL
看了几百份面经,我总结了面试的套路!不过尔尔~
看了几百份面经,我总结了面试的套路!不过尔尔~
看了几百份面经,我总结了面试的套路!不过尔尔~
|
存储 算法
面试前的准备,笔试练手感
 现在出去面试,很多时候都会让你先做一份笔试题,而题目一般是中等偏下的水平,不会很难。   在面试前需要练练手感,以免在解题时没有思路。   练手感可以自己准备一些笔试题目,可根据自己的情况选择合适的题目,而解法可以写一种或多种。   还搜集了一些笔试算法总结,例如《一句话算法》、《LeetCode》相关的内容。
面试前的准备,笔试练手感
|
SQL 算法 Java
论面试八股文的意义
论面试八股文的意义
558 0
论面试八股文的意义
|
存储 缓存 算法
秋招结束面试和面经的总结(个人向)
主要是自己秋招的个人总结(太菜了呀我)