程语言中也不一样,在Java中,右移位会用符号扩充的办法,用1来填充负数中的空位。
逻辑右移位运算符“>>>”是Java和java script中独有的,无论数值是多少,它都用0来填充空位。
设置某一位:可以用按位或运算符(|)。
num |= 1 << x; //这行代码将会设置位元x
清除某一位:可以用按位与运算符(&),并且用取反运算符(~)来屏蔽所有你不想清除的位元。
num &= ~(1 << x); //这会清除位元x
清除一直到i的所有有效位元:
num &= (1 << (i + 1)) -1;
切换某一位元:可以用按位异或运算符(^)
num ^= 1 << x; //这会切换位元x
获得一个位元:对你想检查的位元用按位与
bit = num & (1 << x);
和面向对象编程相关的问题,一般会涉及到设计相关类里的集,以便检验你对面向对象编程的熟悉程度,并了解你是如何架构代码的。你可以使用界面和/或抽象的类来说明,并记住用单例模式(Singleton)、工厂方法模式(Factory)和策略模式(Strategy)来解决这类问题,在编写优雅而可维护的代码方面,它们能对你有长久的助益。
要知道如何用你正在使用的编程语言来读取和写入文件,并且要知道如何生成随机数。
你并不是在面试数学相关的职位,但考虑到我们被计数和测量的问题所包围,所以有一些数学概念也成了编程面试时关注的东西,比较重要的有质数、进制转换(base conversions)和一些基本的组合数学。
对于质数,要大概知道为什么它们很重要,并且要知道每一个数都可以被分解成质数的和。你还得知道如何实现埃拉托斯特尼筛法(sieve of Eratosthenes)。
对于基本的组合数学,你得知道排列和组合。
排列是对一个集合中的数按照一定的次序或者顺序进行整理。比如对于集合{1,2,3},就有6种排列的方式,也就是(1,2,3)、(1,3,2)、(2,1,3)、(2,3,1)、(3,1,2)和(3,2,1)。n个不同数字的排列方式一共有n!种。
还有一种排列叫部分排列,也就是从n个数字的集合中取出k个不同的元素,然后再进行排序。这种排列可以用下面的公式来表达:
组合则是从一个组里选择成员的一种方法,因此选择的顺序并不重要。比如一手牌可以被描述成是从52张一摞的牌堆(n=52)中选出5张组成一组(k=5)。从有n个元素的集合中挑出k个元素,当k>n时,不存在相应的组合,否则这k个元素的组合的数量可以用下面的公式来表达:
当k<=n时,从有n个元素的集合中挑出k个元素的组合形式数量的一般公式。
并发 并发问题在面试中并不常见,但也确实有过,所以你肯定不想到时候毫无准备,那就再去看一下如何生成线程、使用同步以及锁定对共享资源的访问,并理解会导致死锁(deadlocks)的几种情况。准备这个话题有一个好办法,那就是去做出来一个你最喜欢的数据结构的同步版本。
·要问问题。要真正对你的面试官每天都在做什么抱有真正的兴趣,问问他们工作中遇到的机遇与挑战,提前准备几个程式化的问题,显示一下你对公司和这个职位的兴趣。不过无论你做什么,都别问对方“你感觉如何”。首先,你很可能会收到同样程式化的回答,其次,把面试你的人摆在那样一个位置上,也不是什么好主意。
祝各位职场和面试好运!
原文来自Medium Stefan De Clercq,翻译由is译社葛仲君提供。
转载请注明原作者和来自于Nextoffer。