Java面试题:实际开发

Java面试题:实际开发


1.简要描述一下数据库的事务

事务是并发控制的基本单位。所谓的事务,它的根本是一个操作序列,这些操作都执行,或者都不执行,它是一个无法分割的工作单位。 例如银行转账:从一个账户扣款并使另一个账户赠款,这两个操作要么都执行,要么都不执行,不能存在执行一半,否则会出现金额消失或者无中生有。所以我们能够把整个操作的过程,看成一个事务。


2.如果项目已经上线了你,但是出现了问题。 主要是怎么解决,或者你们怎样找出问题所在的(日志方向),这块你接触过吗?

通过引用 log4j 日志包来查看,在每个类中引用相应的日志来记录,在服务器中留出专门的空间来存储日志,后缀为.log 的文件,出现的错误会存储到日志文件中,当我们需要查看的时候通过编译软件来查看。


3.是否了解工作流?

以请假为例,现在大多数公司的请假流程是这样的:

员工打电话(或网聊)向上级提出请假申请——>上级口头同意——>上级将请假记录下来——>月底将请 假记录上交公司——>公司将请假录入电脑

采用工作流技术的公司的请假流程是这样的:

员工使用账户登录系统——>点击请假——>上级登录系统点击允许

就这样,一个请假流程就结束了 工作流系统,实现了工作流程的自动化,提高了企业运营效率、改善企业资源利用、提高企业运作的 灵活性和适应性、提高量化考核业务处理的效率、减少浪费 工作流可以参考 OA 系统,就是工作流程的执行过程。


4.使用SVN时发生冲突,如何解决?

  1. 放弃自己的更新,使用 svn revert(回滚),然后提交。在这种方式下不需要使用 svn resolved(解决)
  2. 放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行 resolved filename 并提交(选择文件—右键—解决)。
  3. 手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行 resolved filename 来解除冲突,最后提交。
  4. 解决冲突:首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svn resolved(解决),然后在签入到版本库。在冲突解决之后,需要使用svn resolved(解决)来告诉 subversion 冲突解决,这样才能提交更新。

5.redis 的 hash 类型在项目中的使用场景

我们在开发中常用 redis 存储五种数据类型 String , Hash , List , Set , Zset(sorted set) 关于 hash 在我们实际开发中的应用,我以存储用户信息为例。

  • 第一种: key: userID; value: username; age; birthday

    第一种将用户 ID 作为查找 key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,避免产生脏数据。

  • 第二种: key: userID+name value: name

    key: userID+age value: age key: userID+birthday value: birthday; 第二种方法是这个用户信息对象有多少成员就存成多少个 key-value 对儿,用用户 ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户 ID 为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。我们采取 hashmap 方法存储解决了上述两个问题,在存储用户信息的时候, key依旧是 userID,但是 value 值却是一个 map, map 中依旧存在 key 和 value;

    key 是姓名标签,对应的 value 是具体的姓名;如果需要修改姓名值时,只加用 userID+field(姓名)就可以修改姓名值了。这样操作不需要重复存储数据,也不需要考虑并发保护问题。


持续更新中…


转载请注明原地址,宋德凌的博客:http://CoderOfSong.github.io 谢谢!

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦