半年工作总结

时间过得真快,在这家公司已经工作半年多了。是时候做个小结了。

有时候,不去比较真的不知道自己有多差劲。在一个安逸的环境里,的确会消磨人的一些东西。

生于忧患,死于安乐。

来公司第一天,让选个位子,然后搬一台新电脑到自己位子拆封,组装机子,装一些必要软件,像python环境,RegexBuddy,wireshark,编码-解码器,Xshell,Xftp,Markdown,phpStudy,虚拟机等,在虚拟机里装了pycharm,myeclipse,mysql,chrome…后面就是看Http,正则,git,python…相关的资料学习,再后来开始接手第一个任务,中国菜刀(Chopper)的协议及数据包分析。然后开始在虚拟机搭建回放环境,搭建好了之后熟悉回放环境,熟悉了之后学习wireshark抓包相关知识,要在服务端进行抓包,抓完了数据包根据回放环境的正则进行匹配,回放成我们的框架程序可以接受的模式,将回放的文件放在框架里,写解码程序,处理这些话单。大概就是 调研,写文档->复现->抓包->回放->写程序->单元测试 几个步骤。其中复现步骤要求会搭建各种漏洞需要的运行环境,抓包步骤要求你会写一些高级高效的正则去匹配要提取的信息。回放就是利用公司自己搭建的环境将数据包翻译成框架可以理解的格式。写程序嘛就是程序员都会干的事。另外,公司比较注重安全性,拷贝东西不可以用U盘,我们用的介质是可擦写光盘。

日子就这样一天天的过去。学习了很多,但好像有更多的东西不会做。

一些java面试题:

Q:写一个简单的方式实现去字符串内部的空格,两个或两个以上的只保留一个。例如”S t r in g”转换成 “S t r in g”。
A:

1
String str2 = str.replaceAll("\\s{2,}", " ");

Q:ArrayList可变长度如何实现的?
A:看ArrayList源码知,ArrayList首先在内存中定义一个长度为10的数组,如果实际要用的长度大于10,就把数组的长度 *1.5+1,给一个新长度,不够用再增加。

Q:ArrayList和LinkedList区别,HashMap和HashTable区别
A:ArrayList和LinkedList区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

参考资料Java中ArrayList和LinkedList区别

HashMap和HashTable区别:
由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。

参考资料HashMap和Hashtable的区别
HashMap和Hashtable的区别

Q:IOC和DI的区别
A:
IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。
DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

它们是spring核心思想的不同方面的描述。

Q:Spring如何实现IOC,Spring的好处
A:
1.解析配置文件,获得对象信息
2.合理的创建它们

使用Spring降低耦合度。

Q:Struts2和SpringMVC有什么区别,SpringMVC相比Struts2有哪些优势
A:
1.入口:springmvc的入口是servlet,而struts2是filter
2.性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,struts2实际上是通过setter getter方法与request打交道的 ,而 springmvc 不用 setter getter 方法。
struts2中,一个Action对象对应一个request上下文。
3.实现restful:
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上 springmvc就容易实现restful url 。
struts2 是类级别的拦截,一个类对应一个 request 上下文,因为 struts2 action 的一个方法可以对应一个 url,而其类属性却被所有方法共享。
4.数据共享:
struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
springmvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量
5.处理ajax请求:
只需一个注解 @ResponseBody,然后直接返回响应文本即可
6.interceptor实现机制:
struts有自己的interceptor机制,springmvc用的是独立的AOP方式。这样导致struts的配置文件量还是比springmvc大

参考资料同是流行MVC框架,比较Struts2和SpringMVC的区别
springmvc和struts2的区别
SpringMVC与Struts2区别与比较总结

Q:网络传输分哪几层
A:
七层结构:
应用层
表示层
会话层

传输层
网络层
数据链路层
物理层

Q:常见的网络协议有哪些?TCP和UDP区别
A:
TCP/IP、HTTP、FTP、等。

TCP是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来。
UDP是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

          TCP           UDP 
是否连接   面向连接       面向非连接
传输可靠性 可靠           不可靠 
应用场合   传输大量数据    少量数据
速度       慢            快

Q:主流设计模式:
单例模式(singleton)、简单工厂(StaticFactory Method)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)、代理模式(Proxy)、命令模式(Command)、策略模式(Strategy)、门面模式(Facade)、桥接模式(Bridge)、观察者模式(Observer)等。

Q:写一个最优的单例模式(singleton)

作用:
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点
优点:
系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

单例模式一般分为五种:懒汉,恶汉,双重校验锁,枚举和静态内部类。
静态内部类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//延迟加载,减少内存开销
//线程安全(java中class加载时互斥的)
public class Singleton {
//私有的构造函数
private Singleton() {
}
//由于SingletonHolder是私有的,除了getInstance()之外没有办法访问它,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,因此它是懒汉式的
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
protected void method() {
System.out.println("SingletonInner");
}
}

调用:

1
Singleton.getInstance().method();

参考资料JAVA单例模式的各种写法分析

Q:线程相关

参考资料Java线程面试题 Top 50

点击按钮打赏作者!