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
    

      

  • 相关阅读:
    idea快捷的输出常用语句
    OneinStack基础搭建typecheo轻量级博客
    自动化框架介绍及使用
    jenkins配置自动化
    selenium模拟鼠标点击
    Linux下安装nginx
    解决“chrome正受到自动测试软件的控制”信息栏显示问题
    Git 常用操作
    ZendStudio自定义代码补全,自定义代码段
    07-python之装饰器
  • 原文地址:https://www.cnblogs.com/xiaoyangjia/p/7595682.html
Copyright © 2011-2022 走看看