2017.4 实习笔试题目
做了一下某大厂的笔试的题目
1. 一个表, visit(cookie_id, area1, area2, date)
给出各种查询策略中, 哪一种最好,每一条SQL语句大同小异, 几乎看不出区别, 还有6,7个选项,同时字数很长。一般的SQL语句好像有根据查询的嵌套顺序来比较差异的,但是这道题反而没有。反正蒙了一个。没有数字可算,心里没有底,应该证明了SQL语法可能会很大地影响查询效率。
2.
给了几个条件,判断你的名次。又是球赛的问题,考查你的推理能力。
3.
engineer的哈夫曼二进制编码有几位?
哈夫曼编码原来是可以构建在一个单词上的。忘了。18位。
4.
大顶二叉堆的插入后的调整。学过插入排序的话应该没问题。
只是表示的方式是字符串从左到右。
5.
没记住。
6.
考查数据挖掘(或者常见的特征提取)。SVD分解成A=USVT后问相关的性质。
7.
iOS和Android。没学过它们, 内存管理,内存循环引用, Address Santizer, 都是什么?
8.
问了一个很复杂的文字游戏,但是什么内容都没有。就是问p做了一个项目,分割成A, B,然后绕来绕去有矛盾了,要怎么处理团队关系。属于那种毫无意义的只要看最后一句的题目。
9.
一个原子整数类。AtomicInteger, 话说我学了这么久没见过这个东西啊?
问测试代码能实现线程安全吗?
10.
乱七八糟的Java输出,经典的A,B继承和构造的问题。反正构造和析构都会输出。
A* pa = new B;
delete pa;
B* pb = new B;
delete pb;
11.
STL容器。太简单了。
12.
一个可怕的softmax-0, softmax-1公式。没具体学过。用来估计概率的。
13.
14.
纸币面值凑数问题。
15.
抽取球的概率题。
16.
C++。
17.
18.
数据库的函数依赖和第三范式改写。不难。
19.
Linux的kernel space和super space。
很少接触,除了操作系统内容知道了一些。
20.
Java的回收机制。
附加题2道, 超过1小时。
第一题是开奖方案,用dfs就知道总方案数了。上交。
第二题是NLP,说实话不难,字符串长度<100000, 要过滤词和统计词频,但是想到在40分钟内完全做出来应该不太可能,提前交卷。
不知道该公司有没有签保密协定,好像是没有的。所以这样也没事吧。
这次笔试让我回想起来的书和知识点:
《Unix网络编程》, 《STL 源码剖析》,《Java核心技术》,《数学之美》,《鸟哥的Linux私房菜》,
《数据库系统概念》,还有那些没有真正学习的:《iOS编程》,《第一行代码》。
事实上考得确实不难,而且还有类似编译原理这种问题没有问,可能是担心某些学校并没有开设这门课吧。
2017.8 其他题目
其实多线程的题目挺有趣的,只是想了想目前遇到的问题并没有太大的启发性。我知道多线程在操作系统中的重要性,进而影响到分布式系统、数据库、安卓开发的学习,而有趣的是目前遇到的问题都是在JAVA语言下写的。可能因为JAVA有原生多线程,写法简单。
刚刚看了一下一道题,是做的笔试。问:运行如下的代码,最可能输出什么?
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class MutexLockTest { private AtomicInteger counter = new AtomicInteger(0); ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public int mutexBiz() { try { if (!readWriteLock.writeLock().tryLock()) { return -1; } return counter.getAndIncrement(); } finally { readWriteLock.writeLock().unlock(); } } public static void main(String[] args) throws InterruptedException { final MutexLockTest lockTest = new MutexLockTest(); for (int i = 0; i < 5; i++) { new Thread(new Runnable() { public void run() { try { System.out.print(lockTest.mutexBiz()); } catch (Exception e) { System.out.print("-2"); } } }).start(); } Thread.sleep(5000); } }
例如结果是 -21023 或者是10324 或者是-210-2-2
我没办法给出直接的答案。可以想见这个东西应该是有一些套路的。但是显然它的结果是不固定的。这个可能性对于实现互斥和同步来说有什么用,我还是不太清楚。