zoukankan      html  css  js  c++  java
  • 随手科技(随手记)2017招聘Java工程师笔试题

    一  如何解决多台web服务器粘性会话的问题?

    粘性session:web服务器会把某个用户的请求,交给tomcat集群中的一个节点,以后此节点就负责该保存该用户的session,如果此节点挂掉,那么该用户的session也会消失。
    非粘性session:通过负载均衡器会根据节点的情况,把用户的请求进行分发,也就是会复制多份session分发给多个节点,这样,如果节点中其中一个session挂掉的话,其它的还能继续工作,也就是只要有一个节点没有挂掉,该用户的信息就不会消失:

    1. 利用Memcache/Redis共享Session数据:搭建Memcache/Redis集群,将用户Session写入Memcache/Redis,设置key值的有效期,即Session的有效期。一般来说缓存的并发性能高于数据库,这个方法可以获得较大的负载量

    2 利用数据库共享Session数据:创建一个数据库库专门存放用户Session,用户登录一次插入一条数据(如果第一次登录),并由程序去维护Session的时效性。这个做法的弊端是,数据库的负担很大而且本来就是容易产生瓶颈的地方,日活的增加导致性能问题。

    二  假如某项目上线后,系统经常出现宕机或者假死,请问应该从哪几个方面去分析解决?

    三  描述一下常见一些hash算法的应用场景

    1. 校验安装文件的完整性,在软件部署的时候,计算软件包当前的哈希值是否与预设值相等,防止软件包被篡改或被替换
    2. 存储和校验用户口令,用户口令不能用明文存储,更进一步,如果系统不知道用户口令明文,那就更好了,而哈希算法就可以做到既不知道用户明文,又可以校验用户口令
    3. 作为数据库表分区的分区条件

    四  假如有100W个敏感词汇表,如何从一段网络文章里快速找出是否存在敏感词。

    https://www.cnblogs.com/AlanLee/p/5329555.html

    五  请描述ThreadLocal的作用以及使用场合,在程序中用来传递数据合适不合适?

      ThreadLocal并不是一个Thread,而是Thread的局部变量。针对每个线程提供自己的变量版本,每个线程维护自己的版本,彼此独立,修改不会影响到对方,避免线程冲突。譬如在Web开发中,存放一次请求的Context。在程序中传递数据是不合适的,ThreadLocal携带多个线程变量版本,传递数据浪费性能

    六  请描述一下系统信息安全方面的一些常见攻击手段与预防方法?

    1 口令破解:可以采用字典破解和暴力破解来获得口令。

    2 IP欺骗::攻击者可以通过伪装成被信任的IP地址等方式来获取目标的信任。这主要是针对防火墙的IP包过滤以及LINUX/UNIX下建立的IP地址信任关系的主机实施欺骗。 

    3 DNS欺骗:由于DNS服务器相互交换信息的时候并不建立身份验证,这就使得黑客可以使用错误的信息将用户引向错误主机。 

    5 DdoS攻击 :DdoS攻击(Distributed Denial of Server,分布式拒绝服务)是一种基于DOS的特殊形式的拒绝服务攻击,是一种分布协作的大规模攻击方式,主要瞄准比较大的站点,像商业公司、搜索引擎和政府部门的站点。他利用一批受控制的机器向一台目标机器发起攻击,这样来势迅猛的攻击令人难以防备,因此具有很大的破坏性。 

    6 缓冲区溢出攻击(buffer overflow)
    通过往程序的缓冲区写超过其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在,根据统计:通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。利用缓冲区溢出攻击可以导致程序运行失败、系统死机、重新启动等后果,更严重的是,可以利用他执行非授权的指令,甚至可以取得系统特权,进而进行各种非法操作。由于他历史悠久、危害巨大,被称为数十年来攻击和防卫的弱点。
    社交工程(Social Engineering)

    七  请列举几个Linux常见命令:

    实时查看服务器日志文件内容

    tail -f 

    修改文件用户所有者以及所在组

    chown命令来改变文件所有者:chown [-R] 账号名称 文件或目录
    chgrp命令来改变文件所属用户组:chgrp [-R] 用户组名称 文件或目录

    查看服务器内存使用情况

     free 

    查找进程名称包括tomcat的进程ID

    ps -ef|grep tomcat

    查看服务器磁盘空间使用情况

     dh -f

    查看服务器IO压力情况

     top

    检测连接到服务器每个节点的连接速度

    netstat -an

    创建一个/local/usr/mysql/dbfile到/data/mysql/dbfile目录的软链接  

     ln -s /local/usr/mysql/dbfile/   /data/mysql/dbfile/

    八  在多服务器集群部署的情况下,如何避免并发带来的问题,比如一个理财产品剩余金额为10000,如何应对抢购?

    解决秒杀抢购类的关键思路是:尽量将请求拦截在系统上游,减轻数据库压力

    1 最简单的方式是采用数据库事务处理,由于数据库并发量有效,无法应对极大流量的抢购

    当某用户进入抢购时,假定一个用户只能抢购一份,执行事务伪代码如下:

    begin transaction;

    select balace from 产品表 where product_id = xx for update;

    if(balace<1) return;

    ...创建订单

    update 产品表 set balace=balace-1;

    end transaction;

    2 采用Redis的事务功能和Watch特性,可以承受较大并发量

    http://blog.csdn.net/e421083458/article/details/49741451

     http://www.cnblogs.com/longtaosoft/p/6627568.html

    九 Java中自带哪些线程池,分别的应用场景是什么?

    Java通过Executors提供四种线程池,分别为:
    newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
    newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
    newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
    newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

    http://cuisuqiang.iteye.com/blog/2019372

    http://www.importnew.com/16797.html

    十  mysql数据库有以下三个表及字段说明

    Columns of "Person" Table,人员表
    Column Name DataType Comment
     pcode  int  人员代码,主键
    name varchar(100) 姓名
    gender varchar(10) 性别
    age int 年龄
    org_code int 所在单位的单位代码,外键
    email varchar(100) 电子邮件
    Columns of "Organization" Table,单位表
    Column Name DataType Comment
    org_code int 单位代码,主键
    name varchar(100) 单位名称
    province varchar(100) 单位所在省份或者直辖市
    Columns of "UserGroup" Table,人员角色表
    Column Name DataType Comment
    pcode int 人员代码
    group_no varchar(10) 角色码,“20”:项目负责人,“10”:单位联络人

    A 由于深圳大学的邮箱发生变更,需要紧急将深圳大学所有单位联络人的邮箱(eg:zhangshan@szdx.edu.cn),域名"szdx.edu.cn"从替换成"szu.edu.cn",请写出SQL语句

    update person set email = replace(email, 'szdx,edu.cn', 'szu.edu.cn') 
    where email like '%szdx.edu.cn' and org_code in (select org_code from organization where name = '深圳大学') and pcode in (select pcode from usergroup where group_no = '10')

    B 现在要查询出北京市每个单位的单位联络人平均年龄,请写出SQL语句,结果输出:单位代码,单位名称,平均年龄

    select p.org_code as 单位代码,o.name as 单位代码, avg(p.age) as 平均年龄 from person p left join organization o on p.org_code = o.org_code where pcode in (select pcode from usergroup where group_no = '10')
    group by o.org_code
    

    C 统计全国每个单位的项目负责人年龄小于40岁的人数,结果输出:单位代码,单位名称,人数

    select p.org_code as 单位代码,o.name as 单位代码, count(p.age) as 人数 from person p left join organization o on p.org_code = o.org_code where pcode in (select pcode from usergroup where group_no = '20')  and p.age < 40
    group by o.org_code
    

      

  • 相关阅读:
    hdu 3790 最短路径问题
    hdu 2112 HDU Today
    最短路问题 以hdu1874为例
    hdu 1690 Bus System Floyd
    hdu 2066 一个人的旅行
    hdu 2680 Choose the best route
    hdu 1596 find the safest road
    hdu 1869 六度分离
    hdu 3339 In Action
    序列化和反序列化
  • 原文地址:https://www.cnblogs.com/xiaoyangjia/p/7595682.html
Copyright © 2011-2022 走看看