发表于: 2017-08-09 23:36:03

2 951


【说明】今天面试了两家公司

一,今日完成:

一个是 泛微软件 做的是 OA软件和协同办公 软件

做了hr 给的思维扩展题 和  技术题之后  就有了和HR 的面谈

问了离职的原因,我说是公司的框架封装的太严重,没有什么技术难点需要自己去实现,然后对方告诉我 他们公司也是这样的,在现有的软件上面进行二次开发和优化,之后,给出的薪酬也是5.5k - 6k 的样子,自己想了想还是算了,之后碰到这样的公司也要先问清楚再去面试,不然就是浪费自己时间。

然后下午去了海淀区的另一家公司,公司是 瑞华信通,主要做物联网相关的产品,比如智能家居

因为物联网这一块自己也不是很懂,所以只是听他说了许多他们公司的一些情况,面试官感觉挺好的,

先是问了我项目的一些基本情况:

比如项目用的什么框架,多少人在开发,因为问的不是很细,所以自己也算是勉强合格了

然后又问了我java 的一些基础:

包括 java 里面 按值传递 和引用传递、JAVA序列化,java 比较器的实现、memcache 里面有几种对象状态、比较对象的方法、servlet的生命周期、servlet容器、自己平时有没有研究的框架、db设计(不是太清楚他想什么)、 对了,还有${}  和  #{}  取值的不同!!还有 junit测试相关的东西,这个理解的也不是很清楚、还有系统的延迟加载问题。

1,序列化什么时候用,怎么用,举个例子

对象存储到硬盘或网络传输,实现serializable 空接口,变成某种格式的字节流,比如 outputStream 的 writeObject方法

还有分布式系统和rmi远程调用,session里面的对象在tomcat重启的时候需要序列化到本地。

2,传值   传引用 

 参数的值在方法里面改变了,但是在主类里面是没有变化的,因为传参的时候传的是值的拷贝。

而对象 传的是引用,q=w  是把w 引用赋值给 q然后就是两个引用指向同一块内存

3,servlet

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

4,${}  和  #{}  取值的不同 ??

使用 #时:
1、用来传入参数,sql 在解析的时候会加上 " ", 当成字符串来解析 ,如这里 role_id = "roleid";
2、#{} 能够很大程度上 防止 sql 注入;
延伸:
1、用 ${} 传入数据 直接显示在生成的 sql 中,如上面的语句,用 role_id = ${roleId,jdbcType=INTEGER}, 那么 sql 在解析的时候值为 role_id = roleid,执行时会报错;
2、${} 方式无法防止 sql 注入;
3、$ 一般用入传入数据库对象,比如数据库表名;
4、能用 #{} 时尽量用 #{};
注意:
mybaties 排序时使用 order by 动态参数时需要注意,使用 ${} 而不用#{};

5,aop

可以通过配置文件或者编程的方式来使用 Spring AOP。

配置可以通过 xml 文件来进行,大概有四种方式:
1. 配置 ProxyFactoryBean,显式地设置 advisors, advice, target 等
2. 配置 AutoProxyCreator,这种方式下,还是如以前一样使用定义的 bean,但是从容器中获得的其实已经是代理对象
3. 通过 <aop:config> 来配置
4. 通过 <aop: aspectj-autoproxy> 来配置,使用 AspectJ 的注解来标识通知及切入点

也可以直接使用 ProxyFactory 来以编程的方式使用 Spring AOP,通过 ProxyFactory 提供的方法可以设置 target 对象, advisor 等相关配置,最终通过 getProxy() 方法来获取代理对象

6,延迟加载

 延迟加载(lazy load) 是 Hibernate3 关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。可以简单理解为,只有在使用的时候,才会发出 sql 语句进行查询。 

  延迟加载的有效期是在 session 打开的情况下,当 session 关闭后,会报异常。   

Hibernate2 实现延迟加载有 2 种方式:1. 实体对象 2. 集合

7,Java 中几种常见的比较器的实现方式

在 Java 中经常会涉及到 对象数组的排序问题,那么就涉及到对象之间的比较问题。

通常对象之间的比较可以从两个方面去看:

第一个方面:对象的地址是否一样,也就是是否引用自同一个对象。这种方式可以直接使用 “==“来完成。

第二个方面:以对象的某一个属性的角度去比较。

从最新的 JDK8 而言,有三种实现对象比较的方法:

一、覆写 Object 类的 equals()方法;

二、继承 Comparable 接口,并实现 compareTo()方法;

三、定义一个单独的对象比较器,继承自 Comparator 接口,实现 compare()方法。

二:明日计划

继续面试

三:疑难问题

框架相关的东西真的挺多的

四:思考总结

多总结面试题


返回列表 返回列表
评论

    分享到