JAVA 面试题

104 篇文章 0 订阅
25 篇文章 0 订阅

面试题

问题一

有四个人,分别是ABCD,每人头上都戴着帽子,帽子颜色有黑白两种,AC头上戴着是黑帽,BD头上戴着是白帽,AB中间有墙分开隔开,AB两人看不见对方。ABCD四人都不知道自己头上是戴什么颜色的帽子。现在的情况是如果四人不能准确回答出自己头上帽子颜色就会被射击,现有一机会,可以先有一人说出自己头上帽子颜色,之后其他人再说。请问谁先说出才能保证其他人都可以准确说对自己头上帽子颜色,并说出为什么?
在这里插入图片描述

答:

C先说,原因C可以知道BD帽子颜色并且是知道是白色,BD不说是因为他们看到的都是黑白两种颜色,无法确定自己颜色。

问题二

从前有AB两个国家,现在AB两个国家决定联姻。现在A国王子要送B国公主一个定情信物:戒指,但是由于王子日理万机,不能亲自去送,但是又害怕在运送的途中被人掉包或者被偷。
现在有一办法王子手上有一个锁LA和一把钥匙KA,公主手上有一个锁LB和一把钥匙KB,每把锁只能使用对应的钥匙打开,现在应该怎么做才能将戒指安全的送达?

1、王子将装有戒指的盒子上锁(LA)给公主,因为只有王子有钥匙(KA),运送途中不会被外人打开;
2、拿到盒子的公主同样也打不开,此时公主也把自己的锁(LB)也锁在盒子上,然后运送给王子,同样,途中没人能够打开盒子;
3、王子拿到上了两个锁(LA、LB)的盒子,于是使用钥匙将自己的锁(LA)打开,运送盒子给公主,现在盒子上只有公主的锁(LB),途中还是没人能够打开;
4、公主拿到只有自己上了锁(LB)的盒子,使用自己的钥匙(KB)打开盒子,拿到戒指,成功。

问题三

银行(bank)中有两个客户(name)张三和李四。我们需要将张三的1000元存款(sal)转到李四的账户上,但是当张三将钱转出后就发生停电,李四的账户并未在停电前收到钱,这就导致张三损失金钱,请问该如何操作,能够避免这个意外。

分析:

SQL

通过sql语句来实现这个过程
update bank set sal = sal - 1000 where name = ‘张三’;
update bank set sal = sal + 1000 where name = ‘李四’;
但是出现停电情况,两条SQL语句并没有执行完
update bank set sal = sal - 1000 where name = ‘张三’;
update bank set sale = sale + 1000 where name = ‘李四’;
但是通过查询数据库会发现 张三减少了1000元而李四却没有加钱

事务

事务的概念:事务是一个最小的、不可分割的工作单元,不论成功与否都作为一个整体进行工作。
事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持久性)四个词的首字母所写。
原子性: 组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。
(银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。)
一致性: 在事务处理执行前后,MySQL数据库是一致的。也就是说,事务应该正确的转换系统状态。
(银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。)
隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。
(银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。)
持久性:事务处理的效果能够被永久保存下来。转账结果能够在无论发生什么情况下都能保存下来.。

通过引入事务处理完成该操作。将SQL语句放进一个事务中。以此来保证两条SQL语句能够执行,并保证数据的一致性。出现意外情况就会通过回滚把数据返回。

面试题四

从前有个国王要举办一个宴会,准备了1000瓶酒。有个刺客要刺杀国王,在一瓶酒中下了毒,然后就被抓住了,刺客招供有一瓶酒中有毒,但是刺客自己也不知道在哪瓶酒里下了毒。国王不想终止宴会,就想到一个办法找死囚过来试酒从而找出毒酒,但是晚宴就要开始,而毒发身亡的需要的时间正好会在晚宴开始前(这就意味着只有一次毒发的机会),国王最后想了一个办法,只用了极少数的死囚数量就试出了毒酒,请问用了多少个死囚?是怎么试的?(假设不管怎么喝每瓶酒都不会喝光)

10个死囚。使用二进制编码的思路,把酒按顺序编号1-1000,并把编号转为二进制,安排死囚依次排好,1号酒转二进为01,就给10号死囚喝,2号酒转二进制为10就给9号死囚喝,3号酒转二进制为11就给9,10号死囚喝,以此类推,最后分好全部酒,最后通过毒发身亡的死囚排列的二进制再转为十进制确定毒酒的号码。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值