贝贝网java开发 20171102

本文涵盖了一轮和二轮技术面试的内容,涉及项目介绍、Linux命令、Redis操作、Spring MVC解释、线程池使用、AOP应用及JVM配置等方面的知识。


一轮技术面

 面试官很年轻,二十七八的样子清秀友善。

1.       项目介绍,自己主要负责的模块等。

2.       Linux 查询cpu的命令 参照http://www.sijitao.net/2016.html

Top 指令

3.       Radis的理解用过哪些?

键值对、set等

参考http://www.runoob.com/redis/redis-lists.html

List 的使用lpop 、rpop:分别为删除头部和尾部

//连接本地的 Redis 服务

        Jedis jedis = newJedis("localhost");

        System.out.println("连接成功");

        //存储数据到列表中

        jedis.lpush("site-list","Runoob");

        jedis.lpush("site-list","Google");

        jedis.lpush("site-list","Taobao");

        // 获取存储的数据并输出

        List<String> list =jedis.lrange("site-list", 0 ,2);

        for(int i=0; i<list.size(); i++) {

            System.out.println("列表项为: "+list.get(i));

        }

}

列表项为: Taobao列表项为: Google列表项为: Runoob

lrang(“list”,0,10)区间的值  

头                            尾

taobao

Google

Runoob

 

redis.expire(key,expiration);设置过期时间

 

4.       Jedis pool

单一Jedis实例不是线程安全的。为了避免这些问题,可以使用JedisPool, JedisPool是一个线程安全的网络连接池。

JedisPooljedisPool = null;

Jedisjedis = jedisPool.getResource();

 

Jedis的使用:

Jedisjedis = new Jedis("localhost");

jedis.set("foo","bar");

Stringvalue = jedis.get("foo");

 

5.       用过radiscluster 么?

http://hot66hot.iteye.com/blog/2050676

6.       如果系统上线了,而突发用户量增加,确定服务无法处理这么多用户,怎么办?

抛弃部分请求

 

二轮技术面

1.       解释springmvc ,

http://blog.youkuaiyun.com/jianyuerensheng/article/details/51258942

2.       Java 线程池有那种

线程池的优点

1、线程稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程重复使用

2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃

Executors类里面提供了一些静态工厂,生成一些常用的线程池。

ExecutorService pool = Executors.newSingleThreadExecutor();

 pool.execute(t1);

pool.shutdowm();

1. newSingleThreadExecutor

创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

2.newFixedThreadPool

创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

3. newCachedThreadPool

创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,

那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。

4.newScheduledThreadPool

创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

ThreadPoolExecutor的完整构造方法的签名是:ThreadPoolExecutor(int corePoolSize, intmaximumPoolSize, long keepAliveTime, TimeUnit unit,BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,RejectedExecutionHandler handler) .

corePoolSize - 池中所保存的线程数,包括空闲线程。

maximumPoolSize-池中允许的最大线程数。

keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。

unit - keepAliveTime 参数的时间单位。

workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute方法提交的 Runnable任务。

threadFactory - 执行程序创建新线程时使用的工厂。

handler - 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。

ThreadPoolExecutor是Executors类的底层实现。

ThreadPoolExecutor threadpool= new ThreadPoolExecutor(…)

http://www.cnblogs.com/sunhaoyu/articles/6955923.html

3.       AOP体现在哪里 怎么用get…http://www.imooc.com/video/15682

Aop是一种编程范式,例如:面向对象编程也是一种范式,是OOP的一种补充。

三方面的分离减少耦合性:

水平分离:展示层 服务层 持久层

垂直分离:模块划分(订单,库存)

切面分离:分离功能性和非功能性功能:权限控制、事务处理、异常处理

Aop两种配置:XML配置、注解方式

代码书三点:

@Aspect

@PointCut 切入点 例如@Adiminonly注释切面表达式

@Before{checkAccess()} advise 5中

切面表达式:executiong 方法匹配,args参数 annotation匹配注释 within 匹配包和类型

例如:Execution(public * comm.mooc.service.*service.*(..))

Before 前置通知

After 后置通知,方法执行完后

AfterReturning 返回通知,成功执行后

AfterThrowing 异常通知,抛出异常后

Around环绕通知

4.       Jvm配置的参数说几个

-Xms 初始堆大小2G

-xmx 最大堆大小 2G

-xmn 年轻代的大小256M

-xss 每个线程的堆栈大小 256K

三轮HR

漂亮和善的MM应该也是刚工作不久的MM,比较友好

1.       朋友眼中的自己怎么样

2.       有什么爱好

3.       对公司了解么

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小新空荡荡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值