【Java精品源码栏目提醒】:以下是网学会员为您推荐的Java精品源码-【精品】PHP初级程序员能力测试部分参考答案2 - 考试认证,希望本篇文章对您学习有所帮助。
PHP 初级程序员能力测试参考答案闭卷注:①本测试满分 100 分,80 分及格,形式为闭卷,不得翻阅任何手册和参考书籍。
本试卷使用的 PHP 版 本为 5.2.6,WEB 服务器使用 APACHE2,开发平台为 WINDOWS xp ②本测试时间为 3 小时,若题后标明不限语言平台,则你可以使用 PHP,C/C,
JAVA 等任意一门语 言完成。
③出题人:陈小白。
1.已知三点 ABC 的坐标为 A2020B1540C5030三点构成一个三角形,求判断点 D30,18 【本题主要考察基本算法,解答不限语言平台 5 分】是否在此三角形内。
连接 ADBDCD可以计算 ABDACDBCD 的面积, 如果三者之和等于 ABC,那么点 D 在三角形内。
海伦公式可以求三角形面积。
SSQRTpp-ap-bp-cp1/2abc也可以用向量叉积的办法来判断。
也就是余弦公式的变形 ad×ab 代表矢量 ad 与 ab 的叉积,其坐标表达式为 ad×ab xd-xayb-ya-yd-yaxb-xa 于是判别过程如下:若三个叉积大于等于 0,则则可判定 d 在△abc 内(上) 。
原理是点在三角行内,必在每条边的同一侧 【本题主要考察基本算法,解答不限语言平台 5 分】2.求 150 万以内的素数。
要点:首先从 3 开始,偶数一定不是素数,所以循环条件是 i2而不是我们习惯了的 i 一旦能被从 2N/2 间的任何一个数整除,则一定不是素数,跳出 还可以再加上一个筛子,把 3,5,7,11,13,17,19 的倍数踢出。
另外还有许多技巧,主要是减少循环次数,固定循环次数等方式。
筛法求素数:ltphpt1microtimeTRUEdefineMAX_NUM 100000all array_fill0MAX_NUM0for i 2 i lt MAX_NUM i if alli 0 //echo iquotnquot for j i j lt MAX_NUM ji allj 1 echo microtimeTRUE-t1PHP 生成的话,应控制在 0.8 秒内。
C 的话应该在 20MS 以内。
(普通 PC 机 1G 内存1.8GHZ)附加题:用 PHP 求出 1 亿以内的素数并保存在文件中;求出 100 亿以内的素数的大概个数。
【4 分】第一问需要用到 glob 函数以及 JS 定时刷新来完成,第二问的答案是 434294481,涉及数论和密码学的知识。
ltphptime microtimetruefp fopenquotprime_number.txtquot quotwquot//定义 10 亿,目前测试 1000 万number 10000000//寻找 31623 以内的质数array array5fori7ilt31623i6 sqrt sqrti foreacharray as value ifivalue0 break ifvaluegtsqrt array i break ji4 sqrt sqrtj foreacharray as value ifjvalue0 break ifvaluegtsqrt array j break //将 23array 写入文件fwritefp2.PHP_EOL.3.PHP_EOL.implodePHP_EOLarray.PHP_EOL//寻找number 以内的质数fork31621kltnumberk60000 nmink60000number-6 s forikiltni6 sqrt sqrti foreacharray as value ifivalue0 break ifvaluegtsqrt //写入串 s . i.PHP_EOL break ji4 sqrt sqrtj foreacharray as value ifjvalue0 break ifvaluegtsqrt //写入串 s . j.PHP_EOL break //将串写入文件 fwritefpsfclosefpecho microtimetrue-timegtlim πx/x/Ln x13.请问_GET_POST_REQUEST 变量的作用是什么?区别是什么?【考察点:php 的变量机制 本小步骤:3 分】 _GET_POST 都用于从表单中取值,_GET 取到的值会显示在浏览器中,而_POST 不会,并且_GET 取 值 有 大 小 限 制 ( 2K ) 所 以 同 等 要 求 下 优 先 使 用 _POST 。
_REQUEST_GET_POST_COOKIE 已知现在有一个表单定义如下:ltform actionquotna.mechenquot methodquotpostquotgtltinput typequottextquot namequotnamequot valuequotchen_rsquot/gtltinput typequotsubmitquot valuequotsubmitquot /gtlt/formgt那么_GETna.me和_POSTna.me的值是什么?为什么?【本小步骤:2 分】:得不到任何值。
因为点是非法字符,将会自动转换为下划线。
可用_POSTna_me访问。
然而某衰哥在某次测试中总是打印不出 POST 过来的值,问题可能出在什么地方?【本小步骤:1 分】:可能是 PHP.INI 文件里 variables_order 选项屏蔽了 P 为了解决上面涉及的部分问题,我们需要了解 PHP 的变量机制。
在每个请求到来以后,apache 处理到 response 阶段的时候, 会将控制权交给 PHP 模块,PHP 模块会在处理请求之前首先间接调用 php_request_startup 具体调用序列是send_php -gt apache_php_module_main -gt php_request_startup.通过这位衰哥的分析,在 php_request_startup 中,找到了初始化请求相关的变量的函数。
其部分代码如下:PHPAPI void php_register_variable_exchar var zval val zval track_vars_arrayTSRMLS_DC char p NULL char ip / index pointer / char index escaped_index NULL int var_len index_len zval gpc_element gpc_element_p zend_bool is_array 0 HashTable symtable1 NULL assertvar NULL if track_vars_array symtable1 Z_ARRVAL_Ptrack_vars_array else if PGregister_globals symtable1 EGactive_symbol_table if symtable1 / Nothing to do / zval_dtorval return while var ampamp var var for p var p p if p p . p_ else if p is_array 1 ip p p 0 break ....以下省略好了,请详细阅读上面的代码,回答这段代码主要是干什么的?为什么要这么处理?【本小步骤:3 分】:处理点号和数组型外部变量。
处理点号是为了二进制安全,处理数组是为了能正确处理如 checkbox 等数组。
【考察点:PHP5 中 SPL4. 定义一个类,使对象可以像数组一样进行 foreach 循环,要求属性必须是私有。
的定义和 OO 高级特性 5 分】ltphpclass sample implements Iteratorprivate _items array1234567public function __construct public function rewind resetthis-gt_items public function current return currentthis-gt_items public function key return keythis-gt_items public function next return nextthis-gt_items public function valid return this-gtcurrent false sa new sampleforeachsa as key gt valprint key . quotgtquot .valgt或者直接把对象转为数组5.PHP 语言细节【考察点:PHP 基础语法知识和杂类】(1)有下面一段不够优雅的代码,也许还存在 BUG:ltphpfruitapple苹果fruitbanana香蕉fruitpear梨fori0iltcountfruitiprint quot水果名字quot.fruitifori1ilt8iarray_pushweeki 【2试优化本代码。
分】ltphpfruitapple苹果fruitbanana香蕉fruitpear梨lencountfruitfori0iltleniecho 水果名字fruitiweekrange17(2)我们都知道 PHP4 的面向对象是不完善的,比如说 PHP4 的类没有析构函数,那如果我要在 PHP4 中实现析构函数的功能,该如何实现?【2 分】 :register_shutdown_function — Register a function for execution on shutdown。
利用这个函数可以模拟 PHP5 中的虚构函数。
函数原型如下:void register_shutdown_function callback function mixed parameter mixed ... 3include和 require函数有什么区别?可以在一个文件里多次 include 同一个文件吗?【2 分】 : 这两种结构除了在如何处理失败之外完全一样。
include 产生一个警告而 require 则导致一个致命错误。
可以在一个文件里多次 include 同一个文件但是会造成变量和函数重复定义的错误,后者是一个致命错误。
(4)在 C 语言的循环判断条件中,为了实现计数器的累加,可以有三种形式,也就是:iii1.试 【假设编译器不进行自动优化 3 分】给这三种形式计数器的速度快慢排序并解释。
1.i 要比 i快一些 因为 i要在 stack 里面保存自增之前的 i 值 而i 可以不用2.i比 i1 要快。
就是一个 inc 命令,如果编译器不优化的话,1 就是 add eax1(5)已知一个 MYSQL 数据库中有 100 万条用户资料数据,现在需要随机取出 10 条不重复的记录,应该如何做最快最简单?【4 分】 :答案一:用程序来产生 10 个随机数这 10 个随机数可以用在 Limit 中定位 生成 10 条 SQL如果 ID 是连续没有删除的话 也可以生成一条 SQL 里面有 10 个 OR ID随机数(4 分) 答案二:SELECT FROM __TABLE__ AS t1JOINSELECT ROUNDRAND SELECT MAXid FROM __TABLE__-SELECT MINid FROM__TABLE__SELECT MINid FROM __TABLE__ AS id AS t2WHERE t1.id gt t2.id ORDER BY t1.id LIMIT 1quot把这条语句执行 10 次,但有潜在问题(3 分) 答案三:select from __TABLE__ order by rand desc limit 1 (0 分)(6)试述 COOKIE 和 SESSION 的用法和区别,以及它们之间的联系。
如果浏览器关闭了,SESSION 还在吗?COOKIE 还在吗?【3 分】 :COOKIE 存储在客服端,由浏览器托管,而 SESSION 存储服务器端,有应用程序托管,二者都用来标记状态,是一个全局变量,但是 SESSION 通常需要依靠 COOKIE,SESSION 在第一次访问后把SESSIONID 存储在了客服端, 所以禁用了浏览器的 COOKIESESSION 也会影响。
当然有其他办法解决这个问题。
注意 SESSION 是不会随浏览器关闭而删除的,COOKIE 也不会。
(7)定义一个抽象类 student,然后由子类 us 继承并实现它的一个抽象方法 do_homework。
分】 【3 abstract Class studentAbstract function do_homeworkClass us extends atudentPublic function do_homeworkEcho ‘finished’ (8)怎样将一个数组对象存储到数据表中的一个字段内?怎样判断传入一个函数的参数是否完整?【2 分】 :将数组序列化为一个字符串就可以了,serializearray ::func_num_args — Returns the number of arguments passed to the function 【3(9)不用任何函数获取文件的扩展名。
分】提示:字符串本身也是一个数组,配合 while 可以完成。
ltphp a abc.0.g/d.e.ff0.jpg b i k 0 whileai ifai . k i // 判断该文件是否含有扩展名 ifk 0 whileak b . ak echo quot得到扩展名:quot.bgt(10)ifstrposstr a false 这个语句有什么 bug【1 分】 :如果第一个字符就是 a,那么函数或取得结果就是 0,0FALSE。
应该使用全等判断11 写出发贴数最多的十个人名字的 SQL,利用下表:membersidusernamepostspassemail【2 分】 答案略。
6.WEB 页面相关技术。
【考察点:HTMLCSSJS 的基础知识】 【兼容性要求:IE6FIREFOX 3。
3 分】(1)利用 CSS 技术实现横向菜单。
效果图如下:: ltdiv classquottestquotgt ltulgtltligtlta hrefquot1quotgt首页lt/agtlt/ligtltligtlta hrefquot2quotgt产品介绍lt/agtlt/ligtltligtlta hrefquot3quotgt服务介绍lt/agtlt/ligtltligtlta hrefquot4quotgt技术支持lt/agtlt/ligtltligtlta hrefquot6quotgt联系我们lt/agtlt/ligtlt/ulgt lt/divgtCSS:.test ullist-style:none.test lifloat:leftwidth:100pxbackground:CCCmargin-left:3pxline-height:30px.testwidth:350px.test adisplay:block;text-align:centerheight:30px(2).现在有一个表格,第一列是选择框,选中需要删除的行后(要求有全选/反选功能),点击页面底部的删除按钮,则将所在行首先进行客户端无刷新删除,返回一个字符串,包含要删除的所有行的字段名形如 【不要求完成 AJAX 部分代码,仅需要完成 DOM 操作和参数组合代码。
兼ampdel135..来供 AJAX 调用。
容性要求:IE6FIREFOX 3。
6分 】效果图如下核心代码如下:ltinput typebutton valuequot全选/反选quot onclickquotselect_allquot /gtltscript languagequotJavaScriptquotgtfunction select_allvar obj_s document.getElementsByNamechkvar ischeck0//判断是否有选中项,默认为无forvar i0iltobj_s.lengthiobj_si.checkedampampischeckifischeckobj_s.lengthforvar i0iltobj_s.lengthiobj_si.checkedtrueelseforvar i0iltobj_s.lengthiobj_si.checkedfalsefunction delvar todovar num0var c document.getElementsByNamechkforvar i0 iltc.length iifci.checked document.getElementByIdsenfe.rowsi.style.display quotnonequot todoci.valueamp numnumampampalerttododocument.getElementByIdquotaj_squot.innerHTMLtodolt/SCRIPTgt(3)试说明 class 和 id 的区别。
分】 【2 :Class 是类选择符,可以被多个元素引用,而 ID 是唯一的,只能被一个元素引用。
在 CSS 中,class的描述是.class而 ID 的描述是id. 【3(4)请真实实现下面的表单。
分】 :ltfieldsetgtltlegendgt最冷的网络“流星雨”lt/legendgtltinput typequotcheckboxquot namequotnamequot idquot1quot/gtltlabel forquot1quotgt 我 只 是 打 酱 油 的lt/labelgtlt/inputgtltbr/gtltinput typequotcheckboxquot namequotnamequot idquot2quot/gtltlabel forquot2quotgt做个俯卧撑锻炼圣体,不说话lt/labelgtlt/inputgtltbr/gtltinput typequotcheckboxquot namequotnamequot idquot3quot/gtltlabel forquot3quotgt 我 没 有 躲 猫 猫 , 真 的 没 有lt/labelgtlt/inputgtltbr/gtltinput typequotcheckboxquot namequotnamequot idquot4quot/gtltlabel forquot4quotgt我又被和谐了,和谐好伟大! !lt/labelgtlt/inputgtltbr/gtlt/fieldsetgtltfieldsetgtltlegendgt 交 通 lt/legendgtltselect namequot 交 通 quot multiplequottruequotsizequot10quotgtltoptgroup labelquot有钱淫坐汽车quotgtltoption valuequotvolvoquotgt东风lt/optiongtltoption valuequotsaabquotgt奥迪lt/optiongtltoption valuequotfiatquot selectedquotselectedquotgt宝马lt/optiongtltoption valuequotaudiquotgt奔驰lt/optiongtlt/optgroupgtltoptgroup labelquot我是穷人quotgtltoption valuequotvolvoquotgt11 路公交lt/optiongtltoption valuequotsaabquotgt永久自行车lt/optiongtltoption valuequotfiatquot selectedquotselectedquotgt小马车lt/optiongtltoption valuequotaudiquotgt老牛车lt/optiongtlt/optgroupgtlt/selectgtlt/fieldsetgt(5)现有一个表格,每行记录了一些数据,最上端有一下拉框,值为单位,现在要求按下拉框中选择的单位 【兼容性要求:IE6 6 分】进行数值的转换过程。
效果图如下: 核心函数如下:function get_flow_unitobj var objdocument.getElementsByNameobj0 var oodocument.getElementsByNamequotflow_unitquot0 ifobj undefined objoo forvar i0iltobj.options.lengthi ifobj.optionsi.selected true new_flow_unit_ obj.optionsi.value break var arr new Arrayvar Table document.getElementByIdquotoTablequotvar rows Table.rowsvar rowCount Table.rows.lengthforvar i0iltrowCounti arrinew Array forvar j0lenrowsi.cells.lengthjltlenj //记录原来的值,防止多次换算引起误差 rowsi.cellsj._defaultValue arrij rowsi.cellsj._defaultValue rowsi.cellsj.innerHTML ifisNumberarrij rowsi.cellsj.innerHTML arrij Math.pow1024 3 -new_flow_unit_.toFixed2 //保留两小数位 function isNumbersvar patrn/-010-90.010-90/if patrn.execs return falsereturn true7.算法。
【本大题下所有小题不限制所用语言平台,主要考察算法技巧】(1)组合算法【8 分】有一个数组 a有 N 个元素,现在要求从中找出含有 mmltN个元素的所有组合。
本题解法较多,现在提供几个 JS 的实现,其他语言类似。
function quick_combinea m var n a.length s quotquot e quotquot r i t p reg /01/ fori 0 i lt n i s i lt m 1 : 0 e i lt n - m 0 : 1 r0 t s do p t.indexOfquot10quot t t.slice0 p.replacereg quot21quot quot01quot t.slicep 2 r.pusht whilet e return r / 快速组合 - 纯位移 / function bit_quick_combinen m var t 1 ltlt n 1 - 1 ltlt n - m // 故意多留一个 1,免得补零 r o p1 p2 whileo t.toString2.slice1 r.pusho p1 o.indexOfquot1quot p2 o.indexOfquot10quot gt 0 t p1 1 ltlt p2 - 1 ltlt p1 1 ltlt p2 - p1 - 1 ltlt 2 : 0 3 ltlt n - p2- 2 return r 【6(2)约瑟夫环(Josephus)问题。
分】答案一:function yuesefunm r0 fori2 iltn i rrmi return r1print_ryuesefu33gt也可以完全仿真模拟,代码比较长,但思路清晰。
答案如下:function getKingMokeyn m .