发表于: 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()方法。
二:明日计划
继续面试
三:疑难问题
框架相关的东西真的挺多的
四:思考总结
多总结面试题
评论