若干javaEE面试考点

Posted by ACRusher on August 20, 2016

若干javaEE面试

社招面试这东西有时候看缘分,但是技术面试还是有很多共性的,常考的知识点也是容易总结的。下面是一些我遇到的的出现频次较高的社招面试技术点。

sql执行的过程

参考: http://blog.itpub.net/30604784/viewspace-1978430/

设计模式和6大设计原则

设计原则:开闭原则,里氏替换原则,依赖倒转原则,接口隔离原则,最少知道原则,组合优先原则 设计模式: 单例模式,工厂模式,构建者模式,装饰器模式,Facade模式,适配器模式,代理模式,观察者模式,责任链模式,策略模式,等等。 参见: http://www.shop988.com/blog/23%E7%A7%8D%E7%BB%8F%E5%85%B8%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html

负载均衡web架构

user->dns->lvs->nginx->tomcat 考虑到多机房,不同运营商网路问题

秒杀中超卖问题如何实现

预分配资源,每台机器提前拉取资源块,耗费完了再重新拉。 资源池也可使用redis,这样可以保证原子操作。

GC算法 和 垃圾收集器

标记清除算法 标记整理算法 复制算法 serial垃圾收集器 、并行垃圾收集器、parnew 垃圾收集器、cms 垃圾收集器、G1 垃圾收集器

如何处理大文件的计算

通过shell命令split拆分文件,然后多线程或多机器处理。

jvm调优参数

记住常用的如下

-Xss1M 线程栈的大小 -Xmn512M 新生带大小 -Xms4096M 最小堆空间 -Xmx4096M 最大堆空间 -XX:PermSize=512m 老年代初始大小 -XX:MaxPermSize=512M 老年代最大大小

-XX:SurvivorRatio=8 -XX:NewRatio=8 -XX:MaxTenuringThreshold=7

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=2 -XX:-CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0

mysql中innodb和myisam的比较

参考: http://www.cnblogs.com/youxin/p/3359132.html

mysql中char(n) 和 varchar(n) 的区别

char是定长存储,末尾补空格,检索时去掉空格。varchar是边长,如果超过n会截断。 int(5) 的存储范围受限于int , 5只是用于显示,如果超出MAX_INT 则截断为MAX_INT. 参考: http://blog.csdn.net/bohu83/article/details/51172238

常用的数据库连接池介绍

项目里用过哪些,如 boneCP、DBCP、druid(阿里)等等。

参见: http://my.oschina.net/Sheamus/blog/383163

Zookeeper分布式锁实现伪代码

1. 判断锁目录是否存在,不存在则创建锁目录(忽略并发导致的创建失败)
2. 在锁目录下创建临时序列化节点(如果创建失败则尝试重建锁目录)
3. 判断自己的节点名称是否是最小,如果是则获取到锁到5,否则到4
4. 监听锁目录子节点的变化,(防止丢失event,监听后主动测试下是否可到5),如果发生改变,则跳转到3,如果超时则删除节点后抛异常
5. 执行获取到锁后的业务代码,然后删除自己的临时节点
6. 如果锁的子节点为空,则尝试删除锁目录(如果由于并发导致子节点不空,删除失败忽略掉)

代码实现参见: url

NIO实现Socket服务器

简单代码示例

ServerSocketChannel serverSocketChannel=ServerSocketChannel.open();
        serverSocketChannel.socket().bind(new InetSocketAddress(8888));
        serverSocketChannel.configureBlocking(false);
        Selector selector=Selector.open();
        SelectionKey selectionKey=serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
        while (true){
            selector.select();
            Set<SelectionKey> selectionKeys=selector.selectedKeys();
            for(SelectionKey key : selectionKeys){
                if(key.isAcceptable()){
                    System.out.println("accept socket.");
                    ServerSocketChannel s= (ServerSocketChannel) key.channel();
                    SocketChannel socketChannel=s.accept();
                    if(socketChannel!=null) {
                        socketChannel.configureBlocking(false);
                        socketChannel.register(selector, SelectionKey.OP_READ);
                    }
                    selectionKeys.remove(key);
                }else if(key.isReadable()){
                    SocketChannel socketChannel= (SocketChannel) key.channel();
                    ByteBuffer byteBuffer= ByteBuffer.allocate(1024);
                    byteBuffer.clear();
                    socketChannel.read(byteBuffer);
                    byteBuffer.flip();
                    System.out.println("receive data : "+ new String(byteBuffer.array(),"utf-8"));
                    selectionKeys.remove(key);
                }
            }
        }

servlet 启动顺序

参考: http://zhxing.iteye.com/blog/399668

java 线程调度算法

java线程调度依赖于底层平台,但有2个大的原则: 时间片轮转、优先级调度。不过java线程优先级不一定可靠。

什么linux发生上下文切换,如何避免过多切换

时间片在进程间切换时,发起系统调用时都会有上下文切换,可以通过 dstat 或 vmstat查看切换频率,空闲系统每秒1500左右,我们的web服务器6000左右,nginx服务器1万左右。减少线程和系统调用来避免过多切换。 参考: http://www.cnblogs.com/ktgu/p/3529144.html

数据库隔离级别介绍

READ_UNCOMMITED 脏读问题 READ_COMMITED 不可重复读问题 (线上默认) REPEATABLE_READ 幻读问题(mysql默认) SERIAL (最高级别,序列化执行)

数据库索引介绍

数据库索引主要是B+树,少部分场景使用哈希索引,B+树支持范围查询、排序,还可以有效减少磁盘IO,B+数是一种平衡多叉排序树,同一层级还有指针相连,查询效率非常高。

参考: http://imysql.com/2016/01/06/mysql-faq-different-between-btree-and-hash-index.shtml

in 和 exists 的区别

不同场景下性能上的区分和 对null值的处理不同。 参考: http://www.360doc.com/content/10/0531/22/908129_30569819.shtml


全文完


Creative Commons License
This work is licensed under a CC A-S 4.0 International License.