第一个:PHP竟然能检测上传的图片是否是黄色图片?????
决定去守门.

解决方案 »

  1.   

    这个上面有一种方案:http://www.oschina.net/translate/prevent-uploads-of-adult-or-nude-pictures-using-php
      

  2.   

    1.可以参考:http://www.oschina.net/translate/prevent-uploads-of-adult-or-nude-pictures-using-php2.你说用like,但因为@163.com,@126.com是在后面,所以是用不到索引的。
    这里有两个方法。
    第一,把email字段反转一次另存,并创建索引,
    然后通过where email like 'moc.361%' 来处理,但这个需要多一组字段,存储和更新成本太高。
    第二,自己做分词fulltext3.登入后会写session,那么可以记录用户登入时的session_id,另一个用户再用相同的帐号密码登入。session_id必然不同(因为浏览器变了),只要判断用户uid是否存在两个session_id,就知道是否多人使用此帐号登入了。
    例如 建立一个login_log的表,相同session_id的只做update addtime处理。
    id, uid, session_id, addtime然后在指定的某个时间段内(addtime),uid=xx 的记录有多条的话,就表示多人使用此帐号登入了。
      

  3.   

    这个上面有一种方案:http://www.oschina.net/translate/prevent-uploads-of-adult-or-nude-pictures-using-php
    腾讯的黄色图片鉴定方法非常准确,我上传了几张,一张都上传不了
      

  4.   


    第一点算基础吗,你应该反问请教下那个面试的,看他怎么教你做出来,这都是拿高薪的岗位
    后2点不难,一个索引加分段处理,一个就是简单的SESSION
    因为你经常做那种CMS的标签调用,所以很少写到后面2个,因为别人做好了,其实这也没什么,不要被打击了,
    楼主当时没有反应过来,但是实际做项目的时候应该能做出来
      

  5.   

    1、人体模特也是黄色的吗?人眼都无法准确判断的东西,不要指望机器能完成
    2、可以使用全文检索索引
    3、http 会话结束后,无法检测到用户关闭了浏览器,只能在响应会话是被动检查
      

  6.   

    1、判断是否黄图原理很简单,就是计算皮肤颜色像素所占比例。不过这会造成误判,比如一张大头照
    2、其实大多数DBMS也是可以用正则表达式的
    3、楼主的思路是对的,其实就是判断用户是否在线,由于http协议是无连接、无状态的,因此无法实现准确判断用户是否在线
    不准确判断的话方法有很多,比如
    i、记录用户最后一次活动时间,超过多长时间不活动就判断不在线
    ii、记录用户登录的session文件名,判断该文件是否被清除
    iii、浏览器发心跳包
    iv、浏览器关闭是是会触发Onunload与Onbeforeunload事件的
    还要其他,以上方法是可以结合或分开使用
      

  7.   

    第二题用like也是可以的呀,不知道为什么面试官冷笑,是效率低吗?
    如果like + 所要查的行数限制比如用between,5000w数据查询不会很慢。
      

  8.   

    第一题哪里是基础题目??????。。 这显然不是基础,图像识别其实可以很复杂,也可以很简单(用别人的库)第二题直接用PHP倒腾一遍,也是可以的啊........每次获取1万条,速度也会很快的(当然这是下下策,但至少能反应你思路还是很灵活的)第三题用session实现,同一个用户ID用多个浏览器登陆的话session_id是不一样的。
    至于检测用户时候关闭了浏览器也可以用会话级别的seesion,当用户关闭浏览器时,session文件会被从服务器删除,或者从memcache中删除。 当浏览器关闭的时候根据session_id去获取对应的session文件肯定是不存在的,这时可以判断用户肯定是关闭了浏览器,所以这时候需要建一个表保存session_id,服务器每隔一段时间去检索一边对应的session_id对应的session文件是否存在,如果不存在表示用户肯定是关闭了浏览器,当session_id对应的session不存在时,顺便删除这一行记录。
      

  9.   

    1.这个问题一点都不基础,只能依靠图像识别,但是图像识别黄色图片难度很大,如何界定是黄色图片这是个问题
    2.email可以用@分隔存储到两个字段中
    3.用户关掉浏览器这个是没办法通知到后台的
      

  10.   

    关于第二题,我特地试验了一下。create table email(id int unsigned primary key auto_increment, e_mail varchar(64)) engine=myisam;insert into email(e_mail) values('[email protected]'),('[email protected]'),
    ('[email protected]'),
    ('[email protected]'),
    ( '[email protected]'),
    ('[email protected]');
    上面假设有五千万条,通过分表的技术,把126和163的记录分开,因为现实情况肯定是这样做,不可能每次都对五千万条记录进行一次索引查找。。
    create table email_163 like email;insert into email_163
    select id, temp.e_mail_163
    from
    (
    select id,
    case e_mail
    when substr(e_mail,-7,3)=163 then e_mail
    when substr(e_mail,-10,3)=163 then e_mail
    when substr(e_mail,-6, 3)=163 then e_mail
    else 0
    end as e_mail_163
    from email order by length(e_mail_163) desc
    )as temp
    where temp.e_mail_163 <> '0';因为126或者163,域名的部分都只存在三种固定的模式,,,163.com,163.cn,163.com.cn。。显然域名这部分的长度是相同的,,所以通过字段比对,将163的提取到另外一个表。提取126的同样如此。
    这样就不用每次都对五千万条记录查询了,而且速度更快
      

  11.   

    第三题我觉得是有办法解决的,不过是存在延迟和性能的损耗。。1个用户表,里面有id,uid,status
    1个状态表 (配置一个定时器,sleep(3600)秒后检查一下这个状态表,状态表3个字段,id,uid sess_id,)相当于每一个小时(时间间隔可以自由配置)去查询一下这个状态表,当sess_id对应的session文件不存在时(会话级别的session在用户关闭浏览器时会被自动删除),就根据对应的uid去用户表将status赋值为0,并根据id删除对应的这一条记录,同时通过用户表和状态表相关联的方式,当多次登陆时,session_id是不同的,这时在状态表中,uid对应的sess_id会有多条记录
      

  12.   

    <会话级别的session在用户关闭浏览器时会被自动删除>这句话是不准确的。这个问题我再仔细想想。
      

  13.   

    我也来当个事后诸葛亮吧!
    第一题,用php来判断是否是黄色图片本身就是很愚蠢的方法,网上有类似的库,但准确率值得商榷,这是个很复杂的东西,怎么可以说是php的基础呢
    第二题,like也是可以使用索引的,查找126,你直接 LIKE '126.com%'不就可以使用索引了吗,当然,全文索引也是个办法
    第三题,php要实现这个确实是很困难,楼主前部分说得没错,一般要达到这个目的,其一是定时update相关字段,来确认其在线,超过一段时间后如果查询不到用户状态就表示他不在线。还有就是使用socket,这个最直接,但相当消耗服务器资源
    总的来说,感觉这面试的是在刁难你吧,你自己肯定不止2500元的,都什么年代了,这种找苦力的公司不做也罢
      

  14.   

    我觉得还是侧重解决问题的能力吧,知识点百度下就知道了。高手不百度就一定知道如何检查黄图?
    高手就一定用过nginx吗?我觉得楼主一个是技术确实一般,一个是气势略弱,感觉面试管都有为了压低待遇来问的, 从心理上分析啊,第一个问题是下马威,多数都不知道,杀杀威风,不过实力强大的人还是能知道借助第三方类库之类的,虽然不知道有什么库能用。
    30岁还这水平,有点学艺不精, 不过完全没必要灰心和气馁,知耻而后勇嘛。