最近参加了一个面试。
之前在网上查询此公司的信息,一大堆诋毁的言论。
到公司之后,感觉并没有网上所说的不堪。除了气氛不是很轻松以外,别的都还可以。
面试官也很和蔼。
进去之后,面试官说一会还有个会,让我先作一套题。
因为是外企,所以题都是英文的。
一共6道题。
第一道:给出一个程序,给出结果。是关于String不变性的考察,很基础,很简单。
第二道:关于接口和抽象类之间的关系。也比较基础。
第三道:关于Statement和Preparedstatement之间的区别。
当时我只是写了Statement里的SQL语句必须是完整给出的。
Preparedstatement是预编译语句,里边的SQL可以有占位符号?出现,后边的程序再对Preparedstatement进行赋值。
看起来似乎没有什么问题,但是这种回答太表面了,这只是使用的时候得简单区别,没有给出面试官相要的答案。面试官可能更想要知道性能方面的差异。
如果用以下的回答也许更好。
1.联系和区别:
PreparedStatement接口继承 Statement,作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能,并与之在两方面有所不同,包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。同时,三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。
2.性能差异:
每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如:
insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');
即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.
当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句.
3.安全性:
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?
select * from tb_name = '随意' and passwd = '' or '1' = '1';
因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:
把[';drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.
而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement,有可能要对drop,;等做费尽心机的判断和过虑.
第四道:是对SQL的考察。
给出了三个表,我们熟悉的学生表,课程表,分数表。检索出高出数学平均分15分的学生信息。
我首先给出了一个数学平均分的中间表,加上给出的三个表,四个表作联合查询。
感觉性能上应该没有问题。
第五道:算法的考察。
给出两个整型数组,给出他们相减的结果。
例:A={1,2,3},B={2,3,4} A-B={1}
我的思路是嵌套循环,第一个数组做外循环,对A数组的每个值,在B数组里循环检索,没有的话就放在数组C中。
当时我也想到有效率的问题,但是也没有想到好办法。就这么地了。后来面试官问如果数据很多,效率很低。
第六道:给出一个单链表,如何检查它有没有回路。给出算法,不用编程。
这个问题,因为我的英语不太好,当时没有看明白,就没有做。面试官后来给我说了一下题意,问我该怎么做。我没有答上来。
后来我想到是不是改用MAP,用键和值分别记录单链表的值和指针,如果MAP的值在键里边存在的话,就说明有回路的存在。
我虽然这样想了,但是我没有说出来,怕弄不好,要被鄙视了。
希望各位能探讨一下第5题和第6题的好方法。
分享到:
相关推荐
精选iOS开发1000题,包含笔试题600道和面试题400道
这份"名企面试笔试真题:TI 笔试题.rar"文件,通过模拟数字应用工程师和MCU助理应用工程师的笔试题目,为求职者提供了一次了解和准备TI面试的机会。 1. **模拟电路与数字电路**: - 模拟电路涉及电阻、电容、电感...
这份名为"精选iOS开发1000题,包含笔试题600道和面试题400道"的资源,是针对这两种语言的知识点进行深入学习和备考的理想材料。以下是对这些知识点的详细说明: 1. **Swift语言知识点**: - **类型系统**:Swift...
2015阿里巴巴笔试题:产品经理及运营篇.pdf
毕设&课设&项目&实训-精选iOS开发1000题,包含笔试题600道和面试题400道。基于Swift和Objective-C语言的知识点。 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件...
精选iOS开发1000题,包含笔试题600道和面试题400道。 包含Swift和Objective-C语言的众多知识点。 帮助您彻底夯实iOS开发的理论基础,并为您的面试保驾护航! 其中笔试题共包含以下几篇内容: 1.语法篇 2.常识篇 3....
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
thoughtworks的笔试题:会议安排。本人使用Java实现,把会议封装成对象,再调用工具类安排会议。下载后的代码里面包含本人姓名,记得改正!附件有运行成功截图!代码能够完美运行,如不能运行我被车撞死!!请放心...
嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集...
第五届ERP沙盘模拟挑战赛笔试试题及答案.docx第五届ERP沙盘模拟挑战赛笔试试题及答案.docx第五届ERP沙盘模拟挑战赛笔试试题及答案.docx第五届ERP沙盘模拟挑战赛笔试试题及答案.docx第五届ERP沙盘模拟挑战赛笔试试题...
大连华信去年的笔试题,可以给各位即将工作的同学一些参考
大数据面试笔试资料-56家互联网大公司面试笔试题资料整理汇总: hive面试.doc 京东.jpg 笔试题1.docx 笔试题10.jpg 笔试题11.JPG 笔试题12_搜狐 笔试题13_九章云极科技有限公司 笔试题14_北京东方国信科技股份有限...
中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题
java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...
2023-04-08 项目笔记-...循环语句 3.1while循环 3.1.1while语句中的break和continue 3.2for循环 3.2.1语法 3.2.2break和continue中 3.2.3for语句的循环控制变量 3.2.4一些for循环的变种 3.2.5一道笔试题:- 2024-04-15
web前端笔试题(含答案) 这个文件包含了多个 web 前端相关的知识点,涵盖了 HTML、CSS、JavaScript、AngularJS、Vue.js 等领域。下面是对每个知识点的详细解释: 1. 前端页面有哪三层构成? 答:结构层(Html)、...
算法笔试题:(Python实现)—— 算法面试题汇总算法笔试题:(Python实现)—— 算法面试题汇总开始之前Python实现只出现一次的数字多数元素搜索二维矩阵 II合并两个有序数组鸡蛋掉落字符串Python实现验证回文串...
阿里巴巴多岗位校园招聘笔试真题汇总-2021 包含多个岗位方向的校园招聘笔试真题: 交互设计师岗 产品运营岗 技术web前端开发岗 技术岗位通识 游戏运营岗 用户体验实习生岗 研发工程师岗 营销专员岗 视觉设计师岗 ...