面试题及答案(集锦12篇)由网友“Gabriella”投稿提供,下面是小编为大家整理后的面试题及答案,仅供参考,喜欢可以收藏与分享哟!
篇1:百度面试题及答案
* 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
* 木杆很细,不能同时通过一只蚂蚁。开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,
* 但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
* 编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间。
*
*
* 分析:题目中的蚂蚁只可能相遇在整数点,不可以相遇在其它点,比如3.5cm处之类的,也就是可以让每只蚂蚁走 1秒,然后
* 查看是否有相遇的即可.
*
* 这样我的程序实现思路就是,初始化5只蚂蚁,让每只蚂蚁走1秒,然后看是否有相遇的,如果有则做相应处理.当每只蚂蚁都
* 走出木杆时,我就记录当前时间.这样就可以得到当前状态情况下,需要多久可以走出木杆,然后遍历所有状态则可以得到所胡
* 可能.
*/
package baidu;
public class Ant {
/*
* step 表示蚂蚁每一个单位时间所走的长度
*/
private final static int step = 1;
/*
* position表示蚂蚁所处的初始位置
*/
private int position;
/*
* direction表示蚂蚁的前进方向,如果为1表示向27厘米的方向走, 如果为-1,则表示往0的方向走。
*/
private int direction = 1;
/*
* 此函数运行一次,表示蚂蚁前进一个单位时间,如果已经走下木杆则会抛出异常
*/
public void walk {
if (isOut()) {
throw new RuntimeException(“the ant is out”);
}
position = position + this.direction * step;
};
/**
* 检查蚂蚁是否已经走出木杆,如果走出返回true
*
*/
public boolean isOut() {
return position <= 0 || position >= 27;
}
/**
* 检查此蚂蚁是否已经遇到另外一只蚂蚁
* @param ant
* @return 如果遇到返回true
*/
public boolean isEncounter(Ant ant) {
return ant.position == this.position;
}
/**
* 改变蚂蚁的前进方向
*/
public void changeDistation() {
direction = -1 * direction;
}
/**
* 构造函数,设置蚂蚁的初始前进方向,和初始位置
* @param position
* @param direction
*/
public Ant(int position, int direction) {
this.position = position;
if (direction != 1) {
this.direction = -1;//方向设置初始位置,比如为0时,也将其设置为1.这样可以方便后面的处理
} else {
this.direction = 1;
}
}
}
/////////////////////////////////////////////////////////
package baidu;
public class Controller {
public static void main(String[] args) {
int time = 0;
for (int i = 0; i < 32; i++) {
Ant[] antArray = getAntList(getPoistions(), getDirections(i));
while (!isAllOut(antArray)) {
for (Ant ant : antArray) {
if (!ant.isOut()) {
ant.walk();
}
}
time++;
// 查看是否有已经相遇的Ant,如果有则更改其前进方向
dealEncounter(antArray);
}
System.out.println(time);
// 将时间归0,这样可以重新设置条件,再次得到全部走完所需要的时间.
time = 0;
}
}
/**
* 这个函数的算法很乱,但暂时能解决问题
*
* @param list
*/
public static void dealEncounter(Ant[] antArray) {
int num_ant = antArray.length;
for (int j = 0; j < num_ant; j++) {
for (int k = j + 1; k < num_ant; k++) {
if (antArray[j].isEncounter(antArray[k])) {
antArray[j].changeDistation();
antArray[k].changeDistation();
}
}
}
}
/**
* 因为有5只Ant,所以组合之后有32种组合.刚好用5位二进制来表示,如果为0则表示Ant往0的方向走 如果为1,则表示往27的方向走
*
* 注:在通过Ant的构造函数设置初始值时,通过过滤把0修改成了-1.
*/
public static int[] getDirections(int seed) {
int result[] = new int[5];
result[0] = seed % 2;
result[1] = seed / 2 % 2;
result[2] = seed / 4 % 2;
result[3] = seed / 8 % 2;
result[4] = seed / 16 % 2;
System.out.println(“directions is ” + result[0] + “|” + result[1] + “|”
+ result[2] + “|” + result[3] + “|” + result[4]);
return result;
}
/**
* 批量设置Ant的初始位置,这样设置不是十分必要,可以直接在代码中设置
*
* @return
*/
public static int[] getPoistions() {
return new int[] { 3, 7, 11, 17, 23 };
}
/**
* 取得设置好初始值的5只Ant
*
* @param positions
* @param directions
* @return
*/
public static Ant[] getAntList(int[] positions, int[] directions) {
Ant ant3 = new Ant(positions[0], directions[0]);
Ant ant7 = new Ant(positions[1], directions[1]);
Ant ant11 = new Ant(positions[2], directions[2]);
Ant ant17 = new Ant(positions[3], directions[3]);
Ant ant23 = new Ant(positions[4], directions[4]);
return new Ant[] { ant3, ant7, ant11, ant17, ant23 };
}
/**
* 判断是否所有的Ant都已经走出了木杆,也就是设置退出条件
*
* @param antArray
* @return
*/
public static boolean isAllOut(Ant[] antArray) {
for (Ant ant : antArray) {
if (ant.isOut() == false) {
return false;
}
}
return true;
}
}
编程:
用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
2 编程:
用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove
函数的功能是拷贝src所指的内存内容前n个字节
到dest所指的地址上。
3 英文拼写纠错:
在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包
含了正确英文单词的词典,请你设计一个拼写纠错
的程序。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度;
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
4 寻找热门查询:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串
的长度为1-255字节。假设目前有一千万个记录,
这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个
。一个查询串的重复度越高,说明查询它的用户越多,
也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度。
5 集合合并:
给定一个字符串的集合,格式如:
{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应
输出
{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
////////////////////////////////1
1 题
char *revert(char * str)
{
int n=strlen(str);
int i=0;
char c;
for(i=0;i
{
c=str;
str=str[n-i];
str[n-i]=c;
}
return str;
}
///////////////////////////////////
2 题
void * memmove(void *dest,const void *src,size_t n)
{
assert((dest!=0)&&(src!=0));
char * temp=(char * )dest;
char * ss=(char * )src;
int i=0;
for(;i< p=“”>
{
*temp++=*ss++;
}
return temp;
}
/////////////////////////////////////////////////
3 题
(1)思路 :
字典以字母键树组织,在用户输入同时匹配
(2)
流程:
每输入一个字母:
沿字典树向下一层,
a)若可以顺利下行,则继续至结束,给出结果;
b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);
算法:
1.在字典中查找单词
字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母
一个字母匹配.算法时间就是单词的长度k.
2.纠错算法
情况:当输入的最后一个字母不能匹配时就提示出错,简化出错处理,动态提示
可能 处理方法:
(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;
(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的
篇2:emba面试题答案
EMBA现在很多院校都在招生,每家院校的面试都是不太一样,但综合一点就是考试难度上还是可以的。因为EMBA入学笔试、面试均由培养单位自行组织,门槛大为降低。EMBA笔试将考查学员经济、管理的基础知识,面试主要测试申请者成为优秀管理人才的潜质。
面试是进入EMBA殿堂的一个重要门坎,各EMBA培养院校都非常重视面试,希望从众多达到笔试录取分数高的考生当中,挑选出具有培养前途、管理潜质及深厚背景的优秀考生进入学校学习,为学校增光添彩。
面试准备的基本内容
面试一般时间都很短,个人面试长不会超过半小时,短则10分钟左右,集体面试一般也不会超过1小时,短则30分钟左右。各院校面试方式的选择是不一样的,需要做不同的准备。
对个人面试,需要准备四部分内容:
第一部分是对自己的面试自我介绍可以有文字稿准备、口头陈述准备两种方式,不论哪种形式都需要深思熟虑、出口成章。
关键是将自己工作生活中的亮点发掘展现出来,千万别说成流水账。通过亮点的展现给考官以良好的第一印象,产生积极的首因效应。可以在这部分间接或直接把你为什么要学EMBA的思想动力、雄心壮志表达出来。这一部分对录取有重要影响,可达35%以上。
第二部分内容一般是考官随机提问。
这一部分提问主要针对的是在考生自我陈述中所反映出的信息当中,考官感兴趣或不清楚的地方做一个追加提问,也可能会结合你的工作实际提出一些现实中遇到的管理问题,你是如何处理的,相对比较灵活而没有答案,因此信息的把握主要在考生自己心中,只要随机应变、自然回答、自圆其说就可以了。如果在面试中你陈述的内容有不真实的情况,在此处被考官发现,那对于你的面试过关是非常不利的。而这一部分如果考官对于你工作中的亮点或行业感兴趣,提出一些探讨导向性问题,你可以积极发挥、充满信心,这对于通过面试是很有帮助的。但是要注意不要得意忘形并流露出骄傲之态。
第三部分内容为管理基本知识和原理提问,有些学校采取抽题目方式。
对于这一部分内容,因为大家都复习过管理,不必紧张,在面试前花一些时间,将备考时看过的一些基本教材回顾一下,不至于将内容全还给老师就可以了。当然管理实践经验丰富的人完全没有必要死背书本来回答面试问题,只要结合以下你的工作实践,将你是如何在实践中处理问题的陈述一下就可以了,这样更能反映你的管理背景和潜能。
第四部分内容,有些学校为时事政治内容、有些学校为管理灵活应用问题。
如果是时事政治内容,请将备考政治资料再看一遍;如果是管理灵活应用,则需要有进取创新精神,这时考心理、考反应,切莫紧张。一般提出的面试问题都很矛盾有冲突,让你不知如何回答。往往这类问题是没有标准答案的,完全看你临场处事、变化能力。
温馨提示:对于团体面试,采取的学校不多,面试难度较大,既反映个人能力也反映团体合作精神。从选择讨论题目,到相互之间的配合,冲突在所难免,而最后团队精神的体现,对小组的成绩影响是非常大的。能够用人容人,或善于被人用,都是管理者必备的素质。
[emba面试题答案]
篇3:某公司面试题及答案
蓝色局部为我的作答
Software Configuration Management Question
perl
Basic
1. Which statement is wrong:
A. $_= hello world;
B. $a=hello world;
C. my $b,$a=hello world;
D. my ($a,$b)=(0,hello world);
Item C: $b is empty and $a is ‘hello world’
All of items is correct in program syntax, and can run.
2. The expression should be (B), then the following code can run correctly:
$a=0;$b=55;
while (expression)
{
$a+=2;
}
print “$a/n”;
A. $a = $b
B. $a*$a <= $b
C. $a != $b
D. $b == 0
3. @array is an array variable, what is output of “print @array;” :A
A. Each element of this array
B. The size of this array
C. The first element of this array
D. Nothing
4. “$a = @array;”, what is value of $a: B
A. The first element’s value of this array
B. The size of this array
C. This line code is wrong
D. N/A
5. Which code snippet can print all elements in cd: B
A. foreach $Var (keys cd)
{
print “$Var /n”;
}
B. for ($I=0;$I< em=“”“”>
{
print “$cd{$I} /n”;
}
C. while ($Var (keys cd))
{
print “$Var /n”;
}
D. print join(‘/n’,cd);
STYLE=“pAGe-BreAK-BeFore: always” CLEAR=“all”
Advance:
6. After execute following code snippet, what is value of $count: B (match twice)
$Str=’hello worldwww.3gos.info!’;
$count=0;
while ($Str=~m/(/w+)/g)
{
$count++;
}
A. 1
B. 2
C. 3
D. 12
7. What is the result of $string? D
$string = “This string contains the number 25.11.”;
$string =~ /-?(/d+)/.?(/d+)/;
A. 25.
B. .11
C. 25.11
D. 25.11.
I don’t know what is meaning of -, but perhaps the answer is D
8. What is meaning of following code snippet?
open(MYFILE,“temp.txt”);
while {
while ( /(/w)/g ) {
$seen{$1}++;
}
}
foreach $word(keys %seen)
{
print “$seen{$word} $word/n”;
}
close(MYFILE);
A. Delete all words in temp.txt
B. Calculate the frequency of each word in temp.txt
C. Wrong code
D. Calculate the sum of words in temp.txt
$1 is first variable of group match of perl, it match a char here.
9. In following code,expression#1 D let $point get the reference of @ARGV, expression#1 should be:
#!/usr/contrib/bin/perl -w
expression#1
print “ARGV = ”, join(“,”, expression#2), “/n”;
A. my $point=@ARGV;
B. my $point={@ARGV};
C. my $point=ARGV;
D. my $point=/@ARGV;
10. The expression#2 A should be:
A. @$point
B. $point
C. @point
D. /@point
NOTE: Answer ofquestion 5 shoud be A
0519d.height = height; d.width = width; } public synchronized Dimension getValues(){ // Ooops! Breaks encapsulation return d; } }
如何发生获胜的QA群体(How to build a successful QA team).
爽利外包的14条分寸
[某公司面试题及答案]
篇4:php常用面试题及答案
1、谈对mvc的认识?
答:由模型(Model),视图(View),控制器(Controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
2、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
3、GD库是做什么用的?
答:gd库提供了一系列用来处理图片的功能,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
4、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么别?
答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串
char的场地固定为创建表设置的长度,varchar为可变长度的字符
5、以下程序的输出结果?
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
答:4
6、检测一个变量是否有设置的函数是?是否为空的函数是?
答:isset($str),empty($str);
7、得查询结果集总数的函数是?
答:mysql_num_rows($result);
8、$arr = array(‘james’, ‘tom’, ‘symfony’); 请打印出第一个元素的值?
答:echo $arr[0];
9、===”是什么?试举一个“==”是真但“===”是假的例子。
“===”是既可以返回布尔值“假”,也可以返回一个不是布尔值但却可以赋与“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。
if (strpos(“abc”, “a”) == true){ // 这部分永不会被执行,因为 “a” 的位置是 0,换算成布尔值“假”}if (strpos(“abc”, “a”) === true){ // 这部份会被执行,因为“===”保证函式 strpos() 的送回值不会换算成布尔值.}
10、以下程序的输出结果
$str=“cd”;
$$str=“hotdog”;
$$str.=“ok”;
echo $cd;
?>
答案:hotdogok
11、给你三个数,写程序求出其最大值。
$var1=1;
$var2=7;
$var3=8;
$max=$var1>$var2?$var1:$var2;
$max=$max>$var3?$max:$var3;
echo $max;
12、将一个选择2号选项的ip为127.0.0.1的用户在当前时间的投票记录到数据库的SQL
答:insert into poll (ip,time,iid) values('127.0.0.1',now(),2);
13、个函数验证电子邮件的格式是否正确 ?
答:function checkEmail($email)
{
$pregEmail = “/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i”;
return preg_match($pregEmail,$email);
}
14、表 menu(mainmenu,submenu,url),请用递归法写出一树形菜单,将所有的menu列出来
function GenerateMenu($id=0,$str=“”)
{
$result=mysql_query(“select mainmenu,url,submenu from menu where mainmenu=$id”);
while($row=mysql_fetch_array($result))
{
echo $str.$row[“url”].“
”;
GenerateMenu($row[“submenu”],$str.“--”);
}
mysql_free_result($result);
}
$link=mysql_connect(“localhost”,“root”,“”);
mysql_select_db(“phpinterview”);
GenerateMenu();
mysql_close($link)
?>
15、PHP可以和sql server/oracle等数据库连接吗?
答:可以
16、写出PHP5权限控制修饰符?
答:public(公共),private(私用),protected(继承)
17、请写出php5的构造函数和析构函数?
答: 构造函数:官方称自定义函数
析构函数:垃圾回收函数(__destruct)
18、表单中 get与post提交方法的区别?
答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.
19、session与cookie的区别?
答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续L一个面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过时间来设置时间长短
20、用PHP打印出前一天的时间格式是-7-3 12:28:21?
答:echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));
21、e2ho(),print(),print_r()的区别?
答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
22、能够使HTML和PHP分离开使用的模板?
答:Smarty, TinyButStrong,XTemplate, Savant,Template Lite, Dwoo, phemplate
23、哪些工具进行版本控制?
答:cvs,svn,vss;
24、如何实现字符串翻转?
答:echo strrev($a); //strrev ― 颠倒字符串
25、优化查询语句?
a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<;(慢)
SELECT * FROM order WHERE orderDate<“2008-01-01”;(快)
例子2:
SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
SELECT * FROM order WHERE title like “%good%”;
SELECT * FROM order WHERE title>=”good” and name<“good”;
26、对于大流量的网站,您采用什么样的方法来解决访问量问题?
答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,
程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量
27、如何修改SESSION的生存时间?.
答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = “./session_save_dir/”;
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:setcookie() and session_set_cookie_params($lifeTime);
28、有一个网页地址, 比如PHP开发资源网主页: www.php100.com/,如何得到它的内容?
答:方法1(对于PHP5及更高版本):
$readcontents = fopen(“www.php100.com/”, “rb”);
$contents = stream_get_contents($readcontents);// stream_get_contents 取得字符串赋值给$contents
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents(“www.php100.com/”);
// file_get_contents() 函数把整个文件读入一个字符串中。
29、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为?
答:状态401代表未被授权,header(“Location:www.xxx.php”);
30、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?
答:heredoc的语法是用”<<<“加上自己定义成对的标签,在标签范围鹊奈淖质游一个字串
例子:
$str = <<
my name is Jiang Qihui!
SHOW;
31、foo()和@foo()之间有什么区别?
答:@foo()控制错误输出
32、如何声明一个名为”myclass”的没有方法和属性的类?
答:class myclass{ }
33、如何实例化一个名为”myclass”的对象?
答:new myclass()
34、你如何访问和设置一个类的属性?
答:$object = new myclass();
$newstr = $object->test;
$object->test = “info”;
35、mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
答:mysql_fetch_row是从结果集取出1行数组,作为枚举
mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
36、下面哪个函数可以打开一个文件,以对文件进行读和写操作?
(a) fget() (b) file_open() (c) fopen() (d) open_file()
答:c
37、下面的程序会输入是否?
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
否,局部变量
38、JS表单弹出对话框函数是?获得输入焦点函数是?
答:弹出对话框: alert(),prompt(),confirm()
获得输入焦点 focus()
39、JS的转向函数是?怎么引入一个外部JS文件?
答:window.location.href;
40、$a = ‘abcdef’; 请取出$a的值并打印出第一个字母?
答:echo $a{0} 或 echo substr($a,0,1)
41、如何使用下面的类,并解释下面什么意思?
class test{
function Get_test($num){
$num=md5(md5($num).”En”);
return $num;
} }
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test(“xiaotian_ls”);
42、请举例说明在你的开发过程中用什么方法来加快页面的加载速
答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦
43、写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
$script=”以下内容不显示:alert(‘cc’);“;
echo preg_replace(”/].*?>.*?/si“, ”替换内容“, $script);
?>
44、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
答:LoadModule
php5_module
”c:/php/php5apache2.dll“;AddType application/x-httpd-php .php
45、sort()、asort()、和 ksort() 有什么分别?它们分别在什么情况下使用?
sort()
根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。
asort()
与 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。
ksort()
根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。
46、用PHP写出显示客户端IP与服务器IP的代码?
答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');//getenv取得开发环境变量
打印服务器IP:echo gethostbyname(”www.bolaiwu.com“) // gethostbyname取得IP地址函数
47、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
答:require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require
include->include有返回值,而require没有(可能因为如此require的速度比include快)
注意:包含文件不存在或者语法错误的时候require是致命的,include不是
48、PHP的意思?
答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页
49、谈谈asp,php,jsp的优缺点?
答:ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它可以产生和运行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script)作为自己的开发语言。
PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(www.php.net)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--脚本级执行(据说PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Java 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Jsp--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP 页面的第一次请求时发生。在 ASP 、PHP、JSP 环境下,HTML 代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PHP、JSP 页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到 HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、JSP三者都是面向 Web 服务器的技术,客户端浏览器不需要任何附加的软件支持。
50、 优化MYSQL数据库的方法
(1).选取最适用的字段属性,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
(2).使用连接(JOIN)来代替子查询(Sub-Queries)
(3).尽量少使用 LIKE 关键字和通配符
篇5:hr面试题及答案
问题6:“与上级意见不一致时,你将怎么办?”
思路:1、一般可以这样回答“我会给上级以必要的解释和提醒,在这种情况下,我会服从上级的意见。”
2、如果面试你的是总经理,而你所应聘的职位另有一位经理,且这位经理当时不在场,可以这样回答:“对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题,我希望能向更高层领导反映
问题7:“我们为什么要录用你?”
思路:1、应聘者最好站在招聘单位的角度来回答。
2、招聘单位一般会录用这样的应聘者:基本符合条件、对这份共组感兴趣、有足够的信心。
3、如“我符合贵公司的招聘条件,凭我目前掌握的技能、高度的责任感和良好的饿适应能力及学习能力,完全能胜任这份工作。我十分希望能为贵公司服务,如果贵公司给我这个机会,我一定能成为贵公司的栋梁!
问题8:“谈谈你的缺点”
思路:1、不宜说自己没缺点。
2、不宜把那些明显的优点说成缺点。
3、不宜说出严重影响所应聘工作的缺点。
4、不宜说出令人不放心、不舒服的缺点。
5、可以说出一些对于所应聘工作“无关紧要”的缺点,甚至是一些表面上看是缺点,最后转化为优点
问题9:“谈一谈你的一次失败经历”
思路:1、不宜说自己没有失败的经历。
2、不宜把那些明显的成功说成是失败。
3、不宜说出严重影响所应聘工作的失败经历。
4、所谈经历的结果应是失败的。
5、宜说明失败之前自己曾信心白倍、尽心尽力。
6、说明仅仅是由于外在客观原因导致失败。
7、失败后自己很快振作起来,以更加饱满的热情面对以后的工作
问题10:请谈谈你个人的最大特色。
A.我人缘极佳,连续3年担任福委会委员。
B.我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。
C.我非常守时,工作以来,我从没有迟到过。
D.我的个性很随和,是大家公认的好好先生。
解答:这题理想的回答是B。A、C、D虽然都表示出应征者个性上的优点,但只有B的回答,最能和工作结合,能够与工作表现相结合的优点、特质,才是面谈者比较感兴趣的回答
篇6:计算机面试题和答案
计算机面试题和答案
1. 什么是程序局部性,为什么会有程序的空间局部性?
程序局部性是指程序在运行时呈现出局部性规律,在一段时间间隔内,程序的执行是局限在某个部份,所访问的存储空间也只局限在某个区域。 空间局部性是指若一个存储单元被访问,那么它附近的单元也可能被访问,这是由于程序的顺序执行引起的。
2. 比较TCP与UDP
TCP与UDP都是传输层的协议,且都用端口号标识数据所达的进程。 TCP提供的是面向连接服务,提供可靠交付。且具有流量控制和拥塞控制。可用于可靠要求高的场合如:SMTP,FTP,HTTP等 。
UDP提供的是无连接服务,提供不可靠交付,且无确认机制。主要用于即时强的场合如:视频聊天,语音电话等。
3. 网络协议的三个核心要素,及概念 .各起什么作用?
语法,定义了数据与控制信息的格式;
语义,定义了需要发出何种控制信息,完成何种响应动作以及作出何种响应; 同步,定义了事件实现顺序的详细说明;
4. 关系数据库都有那些操作,特点是什么?
◇查询:选择、投影、连接、除、并、交、差
◇数据更新:插入、删除、修改
关系操作的特点:集合操作方式,即操作的对象和结果都是集合。
5. 解释一下网络体系结构,它得实现和理论有什么区别?
是指通信系统的整体设计,它为网络硬件、软件、协议、存取控制和拓扑提供标准。 网络体系统结构采用分层结构,各层之间相互独立、较易维护、灵活性好。 国际标准化组织制定了OSI/RM标准,该标准采用了七层结构应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。七层协议体系结构既复杂又不实用,但其概念清楚,体系结构理论较完整。而TCP/IP却成为了事实上的标准,它采用了四层结构即应用层、传输层、网络层和网络接口层。
6. 为了实现重定位需要哪些硬件?
最简单的方式是在系统中增设一个重定位寄存器,用来存放正在执行作业的内存地址,每次访问数据时,由硬件自动将相对地址与重定位寄存器中的起始地址相加,形成实际的特理地址。 当然在分页式与分段式系统中,具地址变换机构,以及
快表等硬件。
7. 数据库保护(访问)的内容有哪些?
利用权限机制,利用完整性约束防止法数据进入数据库,提供故障恢复能力,提供并发访问控制
8. 在交互式系统中,非剥夺是不是一个好的策略?为什么?
非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。 剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先原则、时间片原则。
在分时系统中不剥夺并不是一个好的策略。因为,在分时系统中,除了交互性以外,及时性是很重要的性能因素。当一个作业被阻塞后,CPU就完全空闲了,别的用户的及时性就无法保证了,而完全可以把这些时间分配给别的作业运行。以提高整体的吞吐量。
9. DBA的职责是什么?
DBA则是这个机构的一个(组)人员,负责全面管理和控制数据库系统.职责有:
(1)决定数据库中的信息内容和结构:数据库中要存放哪些信息
(2)决定数据库的存储结构和存取策略:获得较高的存取效率和存储空间利用率
(3)约定义数据的安全性要求和完整性约束条件:负责确定各个用户对数据库的存取权限、数据的保密级别和完整性约束条件
(4)监控数据库的使用和运行:转储数据、维护日志文件、故障恢复
(5)数据库的改进和重组重构:对运行情况进行记录、统计分析,以此来不断改进数据库设计
10. 系统调用的定义
系统调用是OS与应用程序之间的接口,它是用户程序取得OS服务的惟一途径。它与一般的过程调用的区别: 运行在不同的系统状态。调用程序在运行在用户态,而被调用的程序运行在系统态; 通过软中断机制,先由用户态转为系统态,经枋心分析后,才能转向相应的系统调用处理子程序; 一般的过程调用返回后继续执行,但对系统调用,当调用的进程仍具有最高优先权时,才返回到调用进程继续处理;否则只能等被重新调度;
11. 死锁是什么?
指多个有关进程由于争夺资源而造成的一种僵局,在无外力的情况下这些进程都将无法再向前推进的状态。
12. CPU不执行程序的时候干什么?
当没有被任何程序使用的时候,计算机的处理器被认为是空闲的。当然下面提到的空闲任务不在此列中。 当有程序利用CPU空闲时间的时候,就意味着它以较低的优先权运行着,以便不会影响那有正常优先权的程序运行。一般来讲,这会引起CPU消耗更多的电能,而大多数的现代CPU当它们空闲的时候是能够进入省电模式的。 大多数操作系统都有个空闲任务,它是一个特殊的任务。仅当CPU无事可做的时候由操作系统调度器载入它。在现代的处理器中,HLT停机指令节省了大量的电能与执量,而空闲任务几乎总是由一个重复执行HLT停机指令的循环组成。
13. 举例解释一下同步和互斥
同步表现为直接制约,如管道通信,一个进程写,一个进程读,它们是相互制约的。 互斥表现为间接制约,比如多个进程同时请求打印机(没使用SPOOLing技术)、多个进程同时请求一张网卡发送数据包等。
14. 解释一下管程
管程是由一组局部变量、对局部变量进行操作的一组过程和对局部变量进行初始化的语句序列组成。引入它的目的是因为Wait/Singal操作太过分散,对它的维护很麻烦且容易造成死锁。管程的特点是:管程的过程只能访问管程的局部变量,管程的局部变量只能由其过程来访问;任何时刻只能有一个进程进入管程执行;进程只能通管程提供的过程入口进入管程;
15. 在可变分区管理中,需要哪些硬件机制
采用可变分区方式管理时,一般均采用动态重定位方式装入作业。地址变换要靠硬件支持,主要是两个寄存器:基址寄存器和限长寄存器,限长寄存器存放作业所占分区的长度,基址寄存器则存放作业所占分区的起始地址,这两个值确定了一个分区的位置和大小。
转换时根据逻辑地址与限长值比较,如果不有超过这个值,表示访问地址合法,再加上基址寄存器中的值就得到了绝对地址了,否则形成“地址越界”中断。
16. 中断和陷入有什么异同?
外中断时指来自处理机和内存外部的中断,如I/O中断、定时器中断、外部信号中断等。狭义上也叫中断; 内中断主要指在处理机和内存内部产生的中断,也称陷入,如校验错、页面失效、溢出、除数为零等;
中断和陷阱的主要区别:
(1)陷入通常由处理机正在执行的现行指令引起,而中断则是由与现行指令无关的中断源引起的。
(2) 陷阱处理程序提供的服务为当前进程所用,而中断处理程序提供的服务则不是为了当前进程的。
(3) CPU在执行完一条指令之后,下一条指令开始之前响应中断,而在一条指令执行中也可以响应陷阱。
17. 数据库系统和文件系统相比有什么优点? 文件系统 数据库管理系统 某一应用
18. 计算机网络和分布式计算机系统的区别?
两者在计算机硬件连接、系统拓朴结构和通信控制等方面基本都是一样的,它们都具有通信和资源共享的功能。 区别关键在于:分布式计算机系统是在分布式计算机操作系统支持下,进行分布式数据库处理的,也就是说各互联的计算机可以互相协调工作,共同完成一项任务,多台计算机上并行运行。且具有透明性,用户不知道数据、资源的具体位置,整个网络中所有计算机就像是一台计算机一样;而计算机网络却不具备这种功能,计算机网络系统中的各计算机通常是各自独立进行工作的。
19. 为什么引入多道程序技术?
因为引入多道程序技术后,可以进一步提高了CPU利用率(阻塞),提高内存和I/O设备利用率(小作业把内存浪费了),增加系统吞吐量(两都提高后的必然)。
1.java学习:Java面试题和答案
2.Java面试题和答案
3.软件测试面试题和答案
4.Spring面试题和答案汇总
5.酒店面试问题和答案
6.Java的面试题和答案
7.69道Spring面试题和答案
8.5个经典面试问题和最佳答案
9.自主招生面试题和答案
10.经典面试试题和答案分享
篇7:社区面试题及答案
领导让你负责一项工作,需要其他两个部门的配合,但是这两个部门和你所在部门关系不太融洽,你怎样处理?
(1)领导交给我的工作,是对我的信任,我一定会认真、努力的完成好。
(2)首先我会侧面了解这两个部门和我们部门关系不太融洽的原因,如果是我能力所及范围内的,我会积极解决。如果不是我能力所及,我会本着大事讲原则,小事讲风格的原则,和这两个部门的负责人诚恳沟通、交流,为创造部门之间良好关系,打下基础,并在以后的工作中,多沟通多交流,增进了解,开展一些有利于增进友谊与合作的活动。相信通过我耐心诚恳的沟通,他们会理解并支持我的工作,在我们三个部门的通力合作下会把这项工作圆满的完成。
(3)总结经验教训,向领导汇报,并把如何改进部门之间关系的建议,形成书面报告,报领导审阅。
如果你是社区工作者,你想如何来帮助空巢老人?
1、作为我们工作者应该进行一下详细的调查:调查空巢老人的家庭情况、身体状况。做好登记,记录好老人子女的联系方式。
2、和老人子女沟通,希望他们能够常回家陪陪父母,现在社会分工细化、生活节奏很快,子女的确没时间照顾父母,这一点也要理解
3、组织社区内的志愿者,多多照顾老人,看看老人有什么需要,进行上门服务
4、社区卫生院的医生也经常上门对老人进行一下简单检查,虽然满足不了老人的需要,但是也体现了政府对老人的关怀.
你有一个很好的工作设想,你经过实际调查认为这个设想既科学又可行,但你的领导和同事们很固执,你采取什么办法说服他们与你合作?
第一、如果产生这种情况我会感到很遗憾,但要有一片公心,不能心存怨恨觉得领导和同事不同意你的方案有其他方面的原因。
第二、认真调研自己方案的可行性,保证在实施过程中不但会出现自己意料中的效果而且也不会出现不良的后果。
第三、和领导和同事们进行沟通,问清楚是什么原因不同意你的方案,并虚心听取他们对你方案的意见,很多时候由于自己阅历不足等原因,方案可能并没有可行性。
第四、如果方案没有问题,那么根据不同的原因进行说服工作,统一思想.如果是涉及到荣誉的问题,可以将你的想法公开当作大家讨论集体的结晶。
你正在主持一个会议,意见对立的双方由争辨发展到恶语想向,你怎么办?
作为会议的主持人,我会把双方争论的据点、争论的问题记录下来,然后先建议大家冷静一下,或干脆休会半小时,等大家能平心静气坐下来后,我会再次阐述本次会议的目的,就是要大家心平气和地商量某一问题,提出解决办法,而不是争论。等局面被我控制后,我再要求双方各派一名代表将自己方的意见、观点、计划总结出来,通过阐述自己的理由,大家举手表决,少数人服从多数人的意见,我同样会把最后的结果写进会议记录中备查,会后向有关领导认真汇报会议情况。
如果你有一位固执武断的领导,你会经常提合理化建议吗?
①在一般情况下,领导和同事是不能选择的,每个人有每个人的个性和脾气,要学会适应和相处。
②领导脾气直也好,悠也好,固执也好,只要是真心为公,为工作,应该尊重和原谅他,并且按他的安排去做。
③适当的时候,可以用谈心、汇报思想等方式委婉地提出自己的看法,但点到为止。
④在有合理化的建议时,照提不误。因为那是对自己和工作负责。
如果你在这次考试中没有被录用,你怎么打算?
现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次我失败了,那对我来说也仅仅是一次小的挫折而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败:
第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我。
第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人。
第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质。
第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩。
第五、再接再厉,成为一名社区工作者一直是我的梦想,以后如果有机会我仍然后再次参加竞争。
篇8:android面试题及答案
1、是否进行过apk反编译,如何防止反编译
反编译:
Android反编译工具
· dex2jar + jdgui
· apktool
防止反编译:
· 代码加密
这方式,也只能想想,一旦你自己加密了,Android系统都不认识你了,还怎么运行?(如果有那估计就是eoe现在推的爱加密吧).
· 代码混淆
这种方式,其实我不大愿意将他归类于防止反编译,从Android、Java编译原理上来说,针对自身代码做混淆等操作,必然防止不了反编译这个事实。他能做到的就是将字符,函数等混淆成各种a,b,c,d,1,2,3等。
这种方式一般称为,
妨碍对反编译代码的阅读、观看和理解
Android中主要是针对 proguard.cfg 的配置来实现。
具体的实现网上针对这部分的解释已经太多,所以这里不详细介绍了。
· 动态加载类
这种方式的启发是根据web端来的。Web端你要防止,那就不发布呗。
所以我们可以将我们重要的源码,丢在服务器上,必要的时候通过DexClassLoader类去加载重要类。来防止核心代码被反编译。
具体可看DexClassLoader示例
· 用NDK开发核心代码
从上面已经能知道,C/C++等编译型语言的反汇编难度。所以我们可以放心的使用NDK去开发,生成SO库文件再来调用。
PS:部分资源文件若十分珍贵,可以通过 #include直接编译到库里(当然内存可能就大了),这种方式可以自己考虑。
2、Android的动画分类以及两种动画的阐述
Tween动画
又称“补间动画”、“中间动画”,最早接触Tween类是在学习Flash时候,使用ActionScript做动画的时候,使用过类Tween。
Tween动画主要的功能是在绘制动画前设置动画绘制的轨迹,包括时间, 位置 ,等等。但是Tween动画的缺点是它只能设置起始点与结束点的两帧,中间过程全部由系统帮我们完成。所以在帧数比较多的游戏开发中是不太会用到它的。
Tween一共提供了4中动画的效果
Scale:缩放动画
Rotate:旋转动画
Translate:移动动画
Alpha::透明渐变动画
Frame动画
又称帧动画,主要显示方式是为动画的总标签,这里面放着帧动画标签,也就是说若干标签的帧 组合在一起就是帧动画了。 标签中android:oneshot=”false“这是一个非常重要的属性,默认为false 表示 动画循环播放, 如果这里写true 则表示动画只播发一次。 标签中记录着每一帧的信息android:drawable=”@drawable/a“表示这一帧用的图片为”a“,下面以此类推。 android:duration=”100“ 表示这一帧持续100毫秒,可以根据这个值来调节动画播放的速度。
3、AIDL全称,如何工作,可处理那些数据
答:AIDL的英文全称是Android Interface Define Language
当A进程要去调用B进程中的service时,并实现通信,我们通常都是通过AIDL来操作的
A工程:
首先我们在net.blogjava.mobile.aidlservice包中创建一个RemoteService.aidl文件,在里面我们自定义一个接口,含有方法get。ADT插件会在gen目录下自动生成一个RemoteService.java文件,该类中含有一个名为RemoteService.stub的内部类,该内部类中含有aidl文件接口的get方法。
说明一:aidl文件的位置不固定,可以任意
然后定义自己的MyService类,在MyService类中自定义一个内部类去继承RemoteService.stub这个内部类,实现get方法。在onBind方法中返回这个内部类的对象,系统会自动将这个对象封装成IBinder对象,传递给他的调用者。
其次需要在AndroidManifest.xml文件中配置MyService类,代码如下:
为什么要指定调用AIDL服务的ID,就是要告诉外界MyService这个类能够被别的进程访问,只要别的进程知道这个ID,正是有了这个ID,B工程才能找到A工程实现通信。
说明:AIDL并不需要权限
B工程:
首先我们要将A工程中生成的RemoteService.java文件拷贝到B工程中,在bindService方法中绑定aidl服务
绑定AIDL服务就是将RemoteService的ID作为intent的action参数。
说明:如果我们单独将RemoteService.aidl文件放在一个包里,那个在我们将gen目录下的该包拷贝到B工程中。如果我们将RemoteService.aidl文件和我们的其他类存放在一起,那么我们在B工程中就要建立相应的包,以保证RmoteService.java文件的报名正确,我们不能修改RemoteService.java文件
bindService(newInten(”net.blogjava.mobile.aidlservice.RemoteService“),serviceConnection,Context.BIND_AUTO_CREATE);
ServiceConnection的onServiceConnected(ComponentName name, IBinderservice)方法中的service参数就是A工程中MyService类中继承了RemoteService.stub类的内部类的对象。
4、Android系统中GC什么情况下不会出现内存泄露
1. 数据库的cursor没有关闭
2.构造adapter时,没有使用缓存contentview
衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/
3.Bitmap对象不使用时采用recycle释放内存
4.activity中的对象的生命周期大于activity
调试方法: DDMS==>HEAPSZIE==>dataobject==>[TotalSize]
5、什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?
答:一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误
篇9:c面试题及答案
c面试题及答案
1、三种基本的数据模型
答:按照数据结构类型的不同,将数据模型划分为层次模型、网状模型和关系模型,
2、结构与联合有和区别?
答:(1). 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
(2). 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的
3、什么是预编译,何时需要预编译?
答:预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include 包含的文件代码,#define 宏定义的替换,条件编译等,就是为编译做的预备工作的`阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
c 编译系统在对程序进行通常的编译之前,先进行预处理。c 提供的预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编译
1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
4、描述内存分配方式以及它们的区别?
答:1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,
栈内存分配运算内置于处理器的指令集。
3) 从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多
5、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用”::“
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内
6、如何引用一个已经定义过的全局变量?
答 、可以用引用头文件的方式,也可以用 extern 关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用 extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
7、全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么?
答 、可以,在不同的 C 文件中以 static 形式来声明同名全局变量。
可以在不同的 C 文件中声明同名的全局变量,前提是其中只能有一个 C 文件中对此变量赋初值,此时连接不会出错。
8、语句 for( ;1 ;)有什么问题?它是什么意思?
答 、和 while(1)相同,无限循环。
9、do„„while 和 while„„do 有什么区别?
答 、前一个循环一遍再判断,后一个判断以后再循环。
篇10:Java面试题和答案
Java面试题(答案)
第一,谈谈final, finally, finalize的差别。
final?修饰符(关键字)如果一个类被声明为final,意味着他不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,能确保他们在使用中不被改动。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally?再异常处理时提供 finally 块来执行所有清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize?方法名。Java 技术允许使用 finalize 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。他是在 Object 类中定义的,因此所有的类都继承了他。子类覆盖 finalize() 方法以整理系统资源或执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class (匿名内部类) 是否能extends(继承)其他类,是否能implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其他类,但一个内部类能作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的非常笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类和C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不必一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的差别。
&是位运算符。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的差别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或排序。他允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,不过不允许 null 键和 null 值。他也比 HashMap 慢,因为他是同步的。
第六,Collection 和 Collections的差别。
Collections是个java.util下的类,他包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,他是各种集合结构的父接口。
第七,什么时候用assert。
断言是个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。他用于调试目的:
assert(a >0); // throws an AssertionError if a <= 0
断言能有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 能是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或 -dsa 标记。还能在包的基础上启用或禁用断言。
能在预计正常情况下不会到达的所有位置上放置断言。断言能用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既能在公有方法中,也能在非公有方法中利用断言测试后置条件。另外,断言不应该以所有方式改动程式的状态。
第八,GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程式员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,能调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String(”xyz“);创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
第十二,sleep() 和 wait() 有什么差别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定即时恢复执行。这是因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其他原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
第十三,Java有没有goto?
Goto?java中的保留字,目前没有在java中使用。
第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
第十五,Overload和Override的差别。Overloaded的方法是否能改动返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类和子类之间多态性的一种表现,重载Overloading是个类中多态性的一种表现。如果在子类中定义某方法和其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对他而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是能改动返回值的类型。
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复和否呢? 是用==还是equals()? 他们有何差别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复和否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
第十七,给我一个你最常见到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八,error和exception有什么差别?
error 表示恢复不是不可能但非常困难的情况下的一种严重问题。比如说内存溢出。不可能指望程式能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,他表示如果程式运行正常,从不会发生的情况。
第十九,List, Set, Map是否继承自Collection接口?
List,Set是
Map不是
第二十,abstract class和interface有什么差别?
声明方法的存在而不去实现他的类被叫做抽象类(abstract class),他用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而能创建一个变量,其类型是个抽象类,并让他指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为他们父类中的所有抽象方法提供实现,否则他们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其他类能在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程式体。接口只能定义static final成员变量。接口的实现和子类相似,除了该实现类不能从接口定义中继承行为。当类实现特别接口时,他定义(即将程式体给予)所有这种接口的方法。然后,他能在实现了该接口的类的所有对象上调用接口的方法。由于有抽象类,他允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用能转换到接口类型或从接口类型转换,instanceof 运算符能用来决定某对象的类是否实现了接口。
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口能继承接口。抽象类能实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着他能由JVM调度并执行。这并不意味着线程就会即时运行。run()方法能产生必须退出的标志来停止一个线程。
第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但能被重载Overloading。
第二十五,是否能继承String类?
String类是final类故不能继承。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其他线程是否可进入此对象的其他方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程式员特别喜欢问这种问题。
2 << 3
第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
第三十,当一个对象被当作参数传递到一个方法后,此方法可改动这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容能在被调用的方法中改动,但对象的引用是永远不会改动的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、short、char 或 byte。long,string 都不能作用于swtich。
第三十二,编程题: 写一个Singleton出来。
Singleton模式主要作用是确保在Java应用程式中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,他的构造函数为private的,他有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对他的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是非常奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,能直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,他的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
篇11:JAVA面试题及答案
EJB方面
1、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?
答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSp,Servlet,EJB,JNDI,JDBC,JMS.....
2、EJB与JAVA BEAN的区别?
答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
3、EJB的基本架构
答:一个EJB包括三个部分:
Remote Interface 接口的代码
package Beans;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Add extends EJBObject
{
//some method declare
}
Home Interface 接口的代码
package Beans;
import java.rmi.RemoteException;
import jaax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface AddHome extends EJBHome
{
//some method declare
}
EJB类的代码
package Beans;
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javx.ejb.SessionContext;
public class AddBean Implements SessionBean
{
//some method declare
}
J2EE,MVC方面
1、MVC的各个部分都有那些技术来实现?如何实现?
答:MVC是Model-View-Controller的简写。”Model“ 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), ”View“ 是应用的表示面(由JSp页面产生),”Controller“ 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
2、应用服务器与WEB SERVER的区别?
希望大家补上,谢谢
3、J2EE是什么?
答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
4、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXp、JAXM的解释。SOAp、UDDI,WSDL解释。
答:Web Service描述语言WSDL
SOAp即简单对象访问协议(Simple Object Access protocol),它是用于交换XML编码信息的轻量级协议。
UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。
5、BS与CS的联系与区别。
希望大家补上,谢谢
6、STRUTS的应用(如STRUTS架构)
答:Struts是采用Java Servlet/JavaServer pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:
一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。
二.JSp自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。
三.提供了一系列实用对象:XML处理、通过Java reflection ApIs自动处理JavaBeans属性、国际化的提示和消息。
设计模式方面
1、开发中都用到了那些设计模式?用在什么场合?
答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSp/Servlet或者J2EE的相关应用。简单工厂模式等。
2、UML方面
答:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图,
JavaScript方面
1、如何校验数字型?
var re=/^\d{1,8}$|\.\d{1,2}$/;
var str=document.form1.all(i).value;
var r=str.match(re);
if (r==null)
{
sign=-4;
break;
}
else{
document.form1.all(i).value=parseFloat(str);
}
CORBA方面
1、CORBA是什么?用途是什么?
答:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为:
用不同的程序设计语言书写
在不同的进程中运行
为不同的操作系统开发
LINUX方面
1、LINUX下线程,GDI类的解释。
答:LINUX实现的就是基于核心轻量级进程的”一对一“线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。
GDI类为图像设备编程接口类库。
Hibernate: 简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件.
Spring 的依赖注入是什么意思? 给一个 Bean 的 message 属性, 字符串类型, 注入值为 ”Hello“ 的 XML 配置文件该怎么写?
[JAVA面试题及答案]
篇12:Swift 面试题及其答案
虽然Swift出生才一年,但是它已经成为最流行的编程语言之一了。它的语法很简单,以至于当它发布的时候,JavaScript开发者感觉就像下图一样。
事实上,Swift是一种复杂的语言。它包含面向对象和函数方法这两个方面,并且随着新版本的发布在一直进化。
你可以用这些问题来测试应聘者关于Swift方面的知识水平,或者测试一下你自己。如果你不知道答案,没关系,没一个问题下面都有答案供你学习。
这些问题包含两个方面:
笔试问题:通过电子邮件做一个编程测试是极好的,因为这涉及到写大量的代码,从代码质量上可以看出一个人的水平。
面试问题:电话面试或者面对面面试也是很好的,因为对面试者来说口头交流会更方面。
每个方面有分成三个等级:
初级:适合读了一到两本有关Swift的书,并且已经开始用Swift开发应用程序的初学者。
中级:适合那些对Swift语言的概念有深刻理解和强烈兴趣的,并且一直在阅读大量有关Swift的博客文章并进行实践的中级工程师。
高级:适合那些以探索Swift语言知识为乐趣,挑战自己,使用前言技术的人们。
假如你想回答这些问题,我建议你在回答这些问题之前,打开Playground运行一下这些问题的代码。这些问题的答案都在Xcode 7.0 Beta 6 版本中测试过。
准备好了吗?系好安全带,现在就开始!
笔试问题
初学者
问题1、(Swift 1.0及其之后的版本的问题)有什么更好的方法来写下面的for循环?
for var i = 0; i < 5; i++ {
print(”Hello!“)
}
答案:
for _ in 0...4 {
print(”Hello!“)
}
Swift 实现了两个数组运算符closed operator 和 half-operator.前者包含数组中得所有值。例如:下面的例子包含从0到4得所有整数
0...4
half-operator不包含数组中的最后一个元素,下面的例子会得到的结果和上面的一样:
0..<5
问题2C Swift 1.0 or later
思考下面的问题:
struct Tutorial {
var difficulty: Int = 1
}
var tutorial1 = Tutorial()
var tutorial2 = tutorial1
tutorial2.difficulty = 2
tutorial1.difficulty 和 tutorial2.difficulty的值分别是多少?假如Tutorial是一个类,会有什么不同?并说明原因。
答案:tutorial1.difficulty 的值是1,然而tutorial2.difficulty的值是2.
在Swift中结构体是值类型,他们的值是复制的而不是引用的。下面的一行代码意思是复制了tutorial1的值并把它赋值给tutorial2:
var tutorial2 = tutorial1
从这一行开始,tutorial2值得改变并不影响tutorial1的值。
假如Tutorial是一个类,tutorial1.difficulty和tutorial2.difficulty的值将都会是2.在Swift中类对象都是引用类型。tutorial1属性的任何改变将会反应到tutorial2上,反之亦然。
问题3 C Swift 1.0 or later
view1声明成var类型,view2声明let类型。这里有什么区别吗?下面的最后一行代码能编译吗?
import UIKit
var view1 = UIView()
view1.alpha = 0.5
let view2 = UIView()
view2.alpha = 0.5 // Will this line compile?
答案:view1是个变量可以重新赋值给一个新的实例化的UIView对象。使用let你只赋值一次,所以下面的代码是不能编译的:
view2 = view1 // Error: view2 is immutable
但是UIView是一个引用类型的类,所以你可以改变view2的属性,也就是说最后一行代码是可以编译的:
let view2 = UIView()
view2.alpha = 0.5 // Yes!
问题4 C Swift 1.0 or later
下面的代码是把数组里面的名字按字母的顺序排序,看上去比较复杂。尽最大的可能简化闭包里的代码。
let animals = [”fish“, ”cat“, ”chicken“, ”dog“]
let sortedAnimals = animals.sort { (one: String, two: String) ->Bool in
return one < two
}
答案:
第一个简化的是参数。系统的参数类型推断功能,可以计算出闭包里面参数的类型,所以你不必定义参数的类型:
let sortedAnimals = animals.sort { (one, two) ->Bool in return one < two }
函数返回值也可以被推断出来,所以简化掉,代码变为:
let sortedAnimals = animals.sort { (one, two) in return one < two }
这个$i 符号可以代替参数名字,代码进一步简化为:
let sortedAnimals = animals.sort { return $0 < $1 }
在一个独立的闭包内,return这个关键字是可以省略的。最后声明的返回值就是闭包的返回值:
let sortedAnimals = animals.sort { $0 < $1 }
这简化很多了,但是我们不能止步于此!
对于字符串,有一个定义如下的比较函数:
func Bool
这个简单的小函数可以使你的代码简洁如下:
let sortedAnimals = animals.sort(<)
注意每一步的编译结果都相同,但是最后一步你的闭包里只有一个字符。
问题5 C Swift 1.0 or later
下面的代码创建了两个类Address和Person,并且创建了两个实例对象分别代表Ray和Brain.
class Address {
var fullAddress: String
var city: String
init(fullAddress: String, city: String) {
self.fullAddress = fullAddress
self.city = city
}
}
class Person {
var name: String
var address: Address
init(name: String, address: Address) {
self.name = name
self.address = address
}
}
var headquarters = Address(fullAddress: ”123 Tutorial Street“, city: ”Appletown“)
var ray = Person(name: ”Ray“, address: headquarters)
var brian = Person(name: ”Brian“, address: headquarters)
假设Brain搬家到街对面的建筑物里,那么你会这样更新他的地址:
brian.address.fullAddress = ”148 Tutorial Street“
这样做将会发生什么?错误出在什么地方呢?
答案:Ray同样会搬家到新的建筑物里面。Address是一个引用类型类,所以无论你是通过ray或者brain访问headquarters,访问都是同一个实例化对象。headquarters对象的变化也会引起ray和brain的变化。你能想象如果Brain收到Ray的邮件或者相反Ray收到Brain的邮件,将会发生什么?解决方案是创建一个新的Address对象赋值给Brain或者把Address声明成为结构体而不是一个类。
中级
问题1C Swift 2.0 or later
思考下面的代码:
var optional1: String? = nil
var optional2: String? = .None
答案:两者没有什么不同。Optional.None(简称.None)是optional变量值初始化的标准方法,而nil只是.None语法的一种修饰。事实上下面语句输出是正确的:
nil == .None // On Swift 1.x this doesn't compile. You need Optional
.None
记住枚举类型的Optional下的None:
enum Optional{
case None
case Some(T)
}
问题2-Swift 1.0 or later
下面是thermometer作为类和结构体的例子:
public class ThermometerClass {
private(set) var temperature: Double = 0.0
public func registerTemperature(temperature: Double) {
self.temperature = temperature
}
}
let thermometerClass = ThermometerClass()
thermometerClass.registerTemperature(56.0)
public struct ThermometerStruct {
private(set) var temperature: Double = 0.0
public mutating func registerTemperature(temperature: Double) {
self.temperature = temperature
}
}
let thermometerStruct = ThermometerStruct()
thermometerStruct.registerTemperature(56.0)
但是这段代码编译失败了,请问哪里报错,出错的原因是什么。
建议:在使用Playground之前,认真阅读代码并思考。
答案:代码的最后一行不会被编译通过。ThermometerStruct结构体中正确的声明了一个mutating属性函数,它是用来改变结构体内部temperature属性的值的,但是编译器不通过的原因是,通过let创建的不可变的registerTemperature结构体调用了registerTemperature函数。
问题3C Swift 1.0 or later
下面的代码输出是什么?并说明理由。
var thing = ”cars“
let closure = { [thing] in
print(”I love \(thing)“)
}
thing = ”airplanes“
closure()
答案:输出的是:I love cars。当闭包被声明的时候,抓捕列表就复制一份thing变量,所以被捕捉的值并没有改变,即使你给thing赋了一个新值。
如果你要忽视闭包中捕捉列表的值,那么编译器引用那个值而不是复制。这种情况下,被引用变量的值的变化将会反映到闭包中,正如下面的代码所示:
var thing = ”cars“
let closure = {
print(”I love \(thing)“)
}
thing = ”airplanes“
closure() // Prints ”I love airplanes"
问题4C Swift 2.0 or later
下面是一个全局函数,这个函数的功能是计算数组中特殊值得个数。(待校验)
func countUniques(array: Array) ->Int {
let sorted = array.sort(<)
let initial: (T?, Int) = (.None, 0)
let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }
return reduced.1
}
它使用了< 和==运算符,他们限制着T(占位类型)的实际类型,也就是说T必须遵循Comparable协议。你可以这样使用它:
countUniques([1, 2, 3, 3]) // result is 3
现在要求你重写上面的方法作为Array的扩展方法,然后你就可以这样写代码:
[1, 2, 3, 3].countUniques() // should print 3
如何实现?
答案:在Swift 2.0 中,泛类型可以使用类型约束条件被强制扩展。但是假如这个泛类型不满足这个类型的约束条件,那么这个扩展方法既不可见也无法调用。
所以countUniques全局函数可以作为Array的扩展方法被重写如下:
extension Array where Element: Comparable {
func countUniques() ->Int {
let sorted = sort(<)
let initial: (Element?, Int) = (.None, 0)
let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }
return reduced.1
}
}
注意:只有元类型实现了Comparable协议新的方法才可以被使用。例如,如果你在全部是UIView对象的数组中调用countUniques,编译器将会报错。
import UIKit
let a = [UIView(), UIView()]
a.countUniques() // compiler error here because UIView doesn't implement Comparable
问题5- Swift 2.0 or later
下面一个函数的功能是计算两个double(optional)类型的数的相除的结果。在执行除法之前,必须提前满足三个条件:
被除数必须包含nil值
除数必须为包含nil值
除数不能为零
func divide(dividend: Double?, by divisor: Double?) ->Double? {
if dividend == .None {
return .None
}
if divisor == .None {
return .None
}
if divisor == 0 {
return .None
}
return dividend! / divisor!
}
上面的函数可以正常使用,但是会存在两个问题:
★ hr面试题及答案
★ 社区面试题及答案
★ 谷歌面试题及解析
【面试题及答案(集锦12篇)】相关文章:
seo面试题与答案2023-02-15
情景表演类英语面试题2023-08-29
人事专员面试的自我介绍2023-09-26
一道有趣的情景面试题2023-04-08
面试题:求职目的2023-04-04
人事专员面试英文自我介绍2022-05-18
php 面试题2022-06-12
面试题:企业如何面对金融危机2023-01-03
唯品会php面试题2022-07-26
解谜散文2023-07-30