面试刷题7/28

 

简要版:

一面:

4月29日下午2:00-2:50(电话面)

基础知识,业务场景题(秒杀),算法题(比较字符串)

二面:

5月6日下午5:30-6:25(视频面)

给了一道算法题,类似于笔试题,面试官口述,不用跑,思路正确就ok。

N个人排队,输入M行,每行两个数字(X, Y),代表X比Y高(X, Y为0~N-1)。输出N个人的身高的排列,如果不能排列,则输出false。

写完代码题开始随便聊了一些问题。

 

详细版:

一面:4月29日下午2:00-2:50(电话面)

面试官介绍部门的情况

开始问基础题

1  java垃圾回收,如何判断一个对象需要回收

2你说到gcroot,哪些对象可以作为gcroot

3  gc算法

4  如果对象大部分都是存活的,少部分需要清除,用什么算法

5说说对象创建到消亡的过程

6详细说说类加载的过程,静态代码块执行在哪个阶段

7业务场景(秒杀防止超卖)

8说说项目

9 map了解吗,说说hashmap,hashtable,treemap

10网络了解吗,说说输入网址按下回车后的过程

11算法题

两个字符串,按照规则判断相等(重写equals),规则是两个字符串相同字符出现的次数相同,遍判定相等。例(AAB 和 ABA 相等)。

先想了用两个个数组存字符出现次数,然后遍历比较。

面试官想了一下,不要用数组存,时间复杂度允许高一点

两个字符串先用toCharArray(),然后用Arrays.sort(),时间复杂度o(nlogn)

12非科班怎么看待与科班的差距

反问

感受:

面试官比较年轻,问的更偏向基础基础,很少追问,总体上气氛还是非常轻松的。

二面:5月6日下午5:30-6:25(视频面)

自我介绍

项目

有没有遇上什么问题

算法题

 

N个人排队,输入M行,每行两个数字(X, Y),代表X比Y高。(X, Y在0~N-1之间)

输出N个人的身高的排列,如果不能排列,则输出false。

当时看到就想到是图的题目,但是自己图这方面做的比较少。输入输出也得自己处理。

 

写了好久,用回溯做了,面试官说最优解是用入度做,不过回溯做的也可以。

当时确实有点慌,一边想思路一边跟面试官沟通。

面试的时候比较紧张,不过还是用回溯,算是暴力破解了。不过我认为解法可能有点问题。

面试官提了一些可能的情况,比如死循环,不能输出结果。我都解决了这些问题。面试官也认可了我的解法。

我还是觉得自己解法有问题。

最近在学什么技术

讲一讲redis

聊聊健身

说个优缺点

实习时间

反问

感受:

因为我非科班,项目又比较简单,面试官更看重代码能力,所以就出了一道相对而言比较耗时的算法题。

我觉的做算法题即使一开始没思路,还是要尝试着沟通吧,有时候说着说着就有了思路。

 

相比于其他大佬,我的面试题可能偏简单了,还是希望能给各位朋友一些参考。

 

击电话面试

正思考着导师布置的任务,阿里面试官打来了电话,开始了阿里一面。

0阿里面试官自我介绍

介绍了5分钟左右,部门的情况,主要的业务

1会那些操作系统

Linux会一点

说一下操作指令,怎么看cpu,看进程,看端口

2 操作系统进程间通信

3 追问了一个信号相关的问题,我不知道了。

4 io多路复用,说一说

5 面向切面编程,说一说那些场景

6 说说面向切面编程

7 给一个场景,有很多方法,找出耗时长的方法

8 spring的@autowired的作用

9 mybatis和hibernate的区别

10 C,C++了解吗(不了解)

11 python用过吗

没有,我用过matlab(笑)

12 java类加载器哪几种

12 java垃圾回收器

我先说了垃圾回收算法--垃圾收集器--比较CMS和G1。英文名词可能念的不是很标准。

13 配置过java启动设置吗

没有,我只用过-xms等指令改过JVM参数,和jinfo看参数

说说-XMS,除了-XMS,你还用过哪些指令

-XMX  -XSS  -XMN

14 说说java保证线程间同步的方法

Synchronize,reentrantlock,volatile,原子类。。。

15 说说倒计时器和循环栅栏的区别

16 说一说为什么要有JIT

17 平时怎么学习的

18 mysql聚簇索引和非聚簇索引

19 左外连接和内连接的区别

20 数据库的读写分离的作用

21  hash和一致性hash的区别,为什么要用一致性hash

22 spring boot。。。(不了解)

23 消息中间件了解吗,说说为什么要用消息中间件

24 项目中的缓存不一致怎么解决的

25 英文面试(说说你的特点,你的爱好)

26 聊了聊作为非科班,怎么去安排时间学习计算机。

工作压力大能承受嘛

反问

面试官对我的努力以及学习态度非常认可。

面试官的认可对我而言是莫大的鼓励,希望自己能一路走下去,不管发生什么。


二面:50分钟(P9面)

早上面试官发来短信,约了晚上面试,让我准备一段最能体现我水平的代码。

纠结了一天,最后还是硬着头皮,准备展示自己的项目代码。

首先自我介绍

聊了聊为什么转专业,本科阶段分数咋不高,有没有参加一些社团活动(没有)。。。。

 

1 面试官用共享屏幕看了我的项目,项目太过简单。

感觉面试官一下没了兴趣。

2 之后面试官说我简历上写读过SSM框架源码,让我说一说SSM框架的源码

我愣了一下,我说简历上好像没有写吧,SSM框架源码我没读过。

3 问我读过哪些源码

我当时有点懵,第一反应,ha..ha..hashmap

面试官又问,除了hashmap你还读过哪些源码。

想了想,ConCurrentHashMap, ArrayBlockingQueue。。。

那就ConCurrentHashMap吧。你给我讲一讲。

理了下思路,准备开始讲了,面试官让我在IDE上把源码打开讲。

当时差点ConCurrentHashMap都没拼出来。(一紧张,以为是Cur开头的。。。)

之后就一直说Concurrenthashmap源码,面试官主要关注点在怎么是线程安全的。

插入怎么保证安全,读写间会不会影响,怎么保证安全。。。

因为之前项目和SSM框架的源码,我都没能很好的展示。所以concurrenthashmap就尽可能的多说,把自己好的一面展示给面试官。

说了大概40分钟吧,然后面试官说时间差不多了,先这样吧。

反问。

 

面试官让我多参加开源的项目,多参加比较,多参加社团活动。
面完一度觉得自己凉了,没有高水平的代码展示,也没读过spring的源码。
我的朋友也觉得这次希望不大。
之后问了一面的面试官面试结果,没想到过了。


三面:25分钟(P9交叉面)

面试官介绍

面试官介绍自己是中间件部门的,这轮是交叉面。

感觉面试官很和蔼,很有耐心。更多的是让我自己去讲述所学的知识。

自我介绍

项目介绍

说说自己会那些知识

我从头开始说,(集合类,JVM,JUC,Mysql,SSM。。。)

1 集合类用了那些设计模式

2 Juc

说说怎么理解线程安全

之后面试官一直在追问线程安全问题,问我JVM堆上会不会产生线程安全问题。(大概是这个意思)

我这方面确实不太了解。就说了创建对象时候的线程竞争问题。

后来面试官说了,他其实更想我能从底层去说,如果能从底层CPU开始说,那他会非常认可。

反问

面试官很真诚的给了一些学习建议。

他让我加强学习的广度和深度。

先加强广度,多学一些技术知识。(确实我目前的会的技术还很少)

因为学习精力有限,再挑一些方面去加强深度。(我也没能做到在一些方面深入学习)

 

作者:机械狗的救赎
链接:https://www.nowcoder.com/discuss/426600?toCommentId=6170066
来源:牛客网
 

1 jre和jdk的区别

2讲讲java类加载

3类加载器

4说一说知道哪些集合

5 ArrayList和LinkedList

6插入元素时间复杂度

7新建一个ArrayList会分配内存嘛

8 ArrayList扩容的时机

9 ArrayList什么时候缩容

10 LinkedList<Integer>插入int

11谁实现int装包的,是List吗

12 ArrayList线程安全吗,说说你知道的线程安全的List

13 Collections.同步方法和copyonwriteArrayList的异同点

14 copyonwriteArrayList,咋实现线程安全的。

15 copyonwriteArrayList的加锁时机

16 copyonwriteArrayList写的时候读会读到空数据吗

17线程如何创建

18继承Thread和实现Runnable接口的区别,这两者的继承关系

19线程池的参数有哪些,挑重要的解释一下

20线程池怎么保证线程一直运行的

21单线程线程池的应用场景

22怎么保证线程安全

23说说volatile

24 volatile为什么不保证原子性

25 volatile和final的共同点

26 synchronized可重入吗,怎么实现的

27 synchronized怎么实现线程安全的。

28锁升级的过程

29说说自旋锁咋实现的

30读写锁咋实现的

31说说CLH

32 redis你咋用的

33 redis的淘汰策略

34定期删除咋实现的

35 redis中lru咋实现的

36 redis内存满了会怎么样

37 MySQL用的是什么引擎,索引是啥

38 B+树和B树的区别

39 B+树数据太多了会怎么样

40 B+树聚簇索引和非聚簇索引

41 B+树存储结构,在磁盘上(没理解啥意思)

 

算法题

用数组写一个stack,看重逻辑和代码质量

(有个坑,自己写了一个类,运行不了,把代码放到牛客网的Main里就好了)

 

面完9点了,面试官说时候不早了,今天先这样吧。

 

 

5月18日7:30-8:10 二面

原先定在下午面试,但是自己这段时间面试得有点累,不太想继续面了,也不想耽误面试官的时间。

原本想直接面试的时候跟面试官道歉的,但是等了十五分钟,面试官没上线,就打电话给hr,说自己有了offer,不想继续面了,是在是不好意思。

hr问了哪家公司的offer,然后说面试官现在可能有点忙帮我把面试时间改到晚上,面试官想跟我聊聊,让我再试一试。

有点尴尬,一直在道歉,我其实也不想给他们工作添乱。

有预感晚上要被怼。

 

0 自我介绍

1 先说一下项目。

2 Springaop怎么实现的

3 Cglib和jdk的动态代理哪个快,原理是什么。

4 OOM问题怎么定位。

5 线上的OOM问题怎么定位。

6 死锁怎么定位。

7 jstack原理

8 Mysql回表

9 回表的过程,磁盘读几次,跟数据在内存中比哪个快。

10 Redis zset的数据结构

11 跳表怎么实现的

12 插入数据时间复杂度

13 Redis删除一个记录怎么实现的

14 定期删除怎么实现的,是开启一个新进程还是停止工作去删除。

反问:

 

作者:机械狗的救赎
链接:https://www.nowcoder.com/discuss/429239
来源:牛客网
 

字节一面    4月22日下午5:00-5:40

1 算法题    合并链表

leetcode21:https://leetcode-cn.com/problems/merge-two-sorted-lists/

先说思路,第一次面试,有点紧张,说的一塌糊涂。然后又重新说了一遍,迅速写完代码,过了。

2 算法题    合并k个链表

leetcode23:https://leetcode-cn.com/problems/merge-k-sorted-lists/

一开始先问时间复杂度,我马上回答nlogk,然后用归并的想法解释。

但是太紧张,没有解释清楚,面试官不理解我的做法。

最后急中生智想到了用堆来合并。

面试完后看leetcode, 这题我刷了3遍,每次都是用归并的做法做的。

所以面试的时候有点思维定势,想了好久才想到用堆。

3

select * from t where b=1;

Select * from t where a=1 and b=1;

问怎么建立索引

先说需要建两个索引,后来反应过来了,建一个联合索引。

4

Select * from t where c=1;

C是非主键索引,问几次磁盘io,b+索引树高度3。

这题哪位大佬能解答一下,我目前还不知道正确答案是啥。

 

4月26日    2:00-2:50

0 自我介绍

1 最长连续序列

leetcode128:https://leetcode-cn.com/problems/longest-consecutive-sequence/

做过了,秒了。面试官让我测试一下,还好没出问题。

2 String为什么不可变

3 聊聊http2.0

问http缓存

4 有没有遇到过死锁,咋解决的

5 项目中中文乱码问题咋解决,知不知道中文乱码的原因

6 java线程间通信

有没有用过java中的exchange

7 知不知道负载均衡

8 redis几种数据结构

Zset数据结构,怎么排序的

Redis缓存淘汰策略

9 业务场景

电脑微信扫码,然后手机点验证,电脑就进入微信。怎么实现

10 反问

 

4月28日    5:00 - 5:40

0 自我介绍

1 sqrt(x),保证小数点后三位精度

leetcode69变形题:https://leetcode-cn.com/problems/sqrtx/

面试的时候一直在想之前腾讯笔试的时候做的一道题,觉得尾数处理太麻烦了。我以为需要最后保留小数点后三位,想得复杂了。

简单的一道题,写的比较纠结,面试官看我如此纠结,于是就让我全程写代码了。

2 跳台阶,斐波那契数列

剑指offer:https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4?tpId=13&tqId=11161&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

3 单例模式,然后面试官问指令重排。

4写个简单工厂模式吧

写了简单工厂

面试官说确实实现了功能,但是有两个问题,一个是依赖关系没有解除,一个是if else。

 

作者:莫奇311
链接:https://www.nowcoder.com/discuss/461587?type=0&order=7&pos=7&page=1&channel=1009&source_id=discuss_center_0
来源:牛客网
 

一面 (7.15 46min)

数据库

项目中自己最大的困难,如何解决的

聊千万级别的数据表格优化

项目收获 --- 问到自己数据库存的什么数据

PLC上位机,存各种通道数据

索引类型 - 刚提到索引,那具体有哪些索引类型了

单列、多列(复合索引)、覆盖、前缀索引,聚集、非聚集

多列索引实现原理

B+树,然后回答了B+具体的实现原理,相比B树区别

二叉树和哈希适不适合做索引

  1. 二叉树这里主要用红黑树,AVL因为旋转次数较多,一般不用。但两者都不适合索引,因为深度太大,查询慢
  2. 哈希索引是有做索引的,根据哈希值确认对应位置,访问速度快,但不适合范围查询。在InnoDB中有将热点数据建立自适应哈希

数据提交了会不会丢失 -- 引出事务,和事务恢复过程

我先抛出事务提交不会丢失数据,然后分析事务恢复过程。
说恢复的时候,先以一个更新语句为例。会经过两层,SQL上层和存储层。然后具体讲了binlog,undo log,redo log 如何完成的过程

undo log作用

原子性和MVCC

undo Log等日志会不会丢失

有可能,先写入到缓存。具体讲了undo log写入到 redo log日志中,redo log写入缓存,最后才刷新到磁盘。
提升了IO性能

最左原则 -- 给了一个题

最开始说不大了解,还是给了一个题,下列索引能不能共用。
我说1 2肯定是可以,因为顺序是一致的。4由于顺序不一致因此不对。
3我不能确定

面试官给出了补充
顺序没有太大关系,MySQL会自己优化,但3和4都不行

补充
后面和同学聊了下,这里复合索引会有顺序要求。从左边那列必须存在。比如 col1 col2 col3 。 那么当只涉及到col2 col3的时候,索引就失效了。 另外像底下题目,当a >= x 那么会使用a的所有,但b的索引就阻断了

1

2

3

4

5

(a,b)

1. a=x and b =y

2. a=z

3. a>=x and b=y

4. b>=x and a=y

mysql 联合索引生效的条件、索引失效的条件

操作系统

进程间的通信方式

6种,后面说还一种,不知道

那种通信方式最快

我回答的共享内存

现代计算机多核CPU下,如何保证数据一致性,或者说如何工作的

三级缓存,缓存行,缓存锁

在一个读多写少的情况下,如何设计让性能提升

我说的使用双缓存,一份用来读,另外一份用来写,然后再交换数据指针。并拷贝一份新的(类似copy on write)

对某个数据的读写能否保证数据原子性

我以java为例,基本数据可以,非基本数据会有问题,因为超过一个缓存行的长度,那可能分两次读写

网络

time-wait状态知道吗,为什么要有time-wait

四次挥手的2MSL,说了两个原因,

  1. 服务器:如果发送FIN+ACK没有收到C的回复,则会再发送一次,因此C的2MSL为了避免S的重传
  2. C发送完最后一个请求,2MSL时间可以等待本阶段产生的所有报文段从网络中消失,不在新的响应中出现

服务器端可不可能出现大量处于time-wait状态

一开始没说出来,提示了下,比如nginx反向代理,然后我就分析了一通

nginx了解吗,反向代理的时候,如何保证负载均衡

这个其实大致知道的,假装想了会,说了轮询、加权轮询,随机,最少连接,加权最少连接,IP哈希保证会话一致性。

刚说到哈希负载均衡,那如果新加入节点,如何保证会话仍然落到同一个节点

开始说了说取消服务器的状态,统一服务器管理session。
后面面试官说如果节点就是有状态的,怎么解决。
想了半天不知道,面试官说用一致性哈希,让我了解下

算法

判断一个树是否二叉搜索树

中序遍历即可。我写的 pre节点用Integer.MAX_VALUE。说不大好,不直观,我想了想,用节点,先给null值。

二面(7.22 50min)

聊项目

详细说明业务场景,索引建立在哪一列,查询语句是什么

这里自己其实有一点没有太明白,SQL Sever的最左原则是否适用,需要查一下

点赞点踩介绍

介绍了点赞点赞逻辑,和一个异步过程。
这里被面试官指出:当前的方式和缓存时相悖的,应该sql存数据,redis缓存,这样才能提高访问速度。

基础

redis和mysql哪个更快,为什么

主要内存和外存的磁盘IO读写区别

虚拟内存是怎样的

内存空间不足,价格昂贵,虚拟内存提供进程一个抽象的私有的连续逻辑内存地址
从作用,然后覆盖,交换降到虚拟内存

虚拟内存和物理内存如何管理的

页表映射

页面置换算法

FIFO,LRU,第二次机会,时钟轮转

HTTP和HTTPS区别

加密 + 认证 + 完整性保护

  1. 默认端口:80/443
  2. HTTP不安全、HTTPS在SSL/TLS之上,对称和非对称加密,安全
  3. HTTP + 加密 + 认证 + 完整性保护 = HTPPS
  4. 混合加密:S给C一个公钥,C利用公钥加密对称加密共享秘钥,S利用自己的私钥解开共享秘钥。最后使用共享秘钥加密进行通信

CA认证具体过程,如何保证正确性

服务端申请证书,和客户端去CA请求证书是否正常的一个过程

算法题:LeetCode 41 缺失的最小正数

反问

三面(7.28 55min)

项目

前面聊了很多项目方面的吧,谈谈你对前面面试的感受

面试是一个学习与提高的过程,一面的时候最左原则不是很懂,学习了下,在自己项目里也对应修改了下,效果的确要好一些;

二面提到的redis和mysql的运用,自己重新理了下逻辑,将项目修改为一个异步过程。balabala

之前谈的第一个项目,那来聊聊第二个项目

这里说了下大概场景,和自己的优化,后面聊到订阅者模式和pull方式获取数据,这个就不详细说了。

基础

虚拟内存二面问到了,那你说说虚拟内存置换算法

这个二面其实也问到了。前面没有回答OPT,这次加上了

前面有问到网络吗,那你说下一个网址输入到到服务器会经过哪些地方

我确认了下问题,不大需要回答具体哪个协议的过程。从本地计算机,不知道自己网关路由器时就ARP获取MAC地址,然后到达路由器,路由器根据路由选择协议,不断选择下一跳,在生存时间内到达对方服务器,那么将获得对应响应

刚说到路由器到下一跳,那么如何确定下一跳位置呢?

自己从系统内路由选择协议和系统外路由选择简单回答了下。

问一下MAC相关的,MAC数据哪一层结构

数据链路层

那MAC地址是如何确认一台设备的呢

前24位厂商,后24位计数编号

MAC地址可不可以相同,相同会有什么影响

mac地址可以修改网络地址,但本机硬件不可以,相同的话会造成同一个局域网两台设备冲突。

那比如我两现在的MAC地址一样,能传输到我这边来吗?

我猜测可以,从链路层每次都会修改对应的下一跳MAC地址,当时跟面试官说这是我猜的,他笑了笑。就开始其他的了

算法概率题

概率题-- A, B两个人,轮流抛硬币, 谁先抛出正面谁就赢,A先抛,求A赢的概率?

因为输的概率是1/4+1/4 * 1/4+1/4 * 1/4 * 1/4+.....+1/4的n次方,极限值为1/3,所以赢的概率是2/3。

这样的话是不公平的,那如何公平呢?

抛一次,正的A赢,反的B赢

那假设都要抛了

两次,正正,正反 A赢, 反正,反反B赢

算法题 -- 剑指offer 3改编

1

2

int 数组, size N, 元素范围 0~ N-1, 求存在重复的元素。

要求: 时间O(N), 空间O(1

一开始只想着求一个元素,将数组都加个1,则范围变为 1 - N,则可以变成一个链表求环的入口问题,说了半天,面试官没听太懂,让我先写,我写到一半,面试官说这是只找一个嘛,要找多个怎么办。
又想了好一会,跟面试官说了另外一种思路,后面面试官提示了下,改成另外一种方案了,代码如下。

1

2

3

4

5

6

7

8

9

10

11

12

13

class FindRepeatNum{

    public Set<Integer> findRepeat(int[] nums){

        int n = nums.length;

        Set<Integer> res = new HashSet<>();

        if(n == 0) return res;

        for(int i = 0; i <n; i++){

            int idx = nums[i%n];

            nums[idx] += n;

            if(nums[idx] / n >= 2) res.add(idx);

        }       

        return res;       

    }

}

自学过程有看那些书

反问环节

小结

相比于很多人流程快速,我算是比较慢的,可能教育投的人也多,自己投的也不早。不过整体算比较顺利,面试官也都很有耐心。

总体而言,一面相对来说问的最深最广,可能也是自己操作系统这块比较薄弱。二面项目问的最深,光项目就问了二十多分钟,也给了我很多启发。三面从一个新的维度问了一些项目问题;算法题上,面试开始时说这场面试40-45分钟,算法题留了十分钟给我做,当时想得有点紧张,面试官很有耐心的引导了,虽然做出来了。最后也不知道能不能通过,但反问环节给了一个比较重要的点:在接下来一年的可以补一下科班学的那些课程,包括编译原理、离散数学等,这样入职后会有不一样新的认识。对于技术栈,MQ也多了解些。

前面也面了些公司,字节算是已经面完整的第一家公司。不管怎样,面试也是一个提高过程,感觉自己语言表达和具体技术深度的确都有一定的提升。前面看了很多小伙伴们分享的面经,这篇简易的面经就当做一个记录和分享。

最后,许愿通过!


更新:牛客许愿很灵哇,刚发完没多久,hr发消息说三面已通过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
*:手机通讯录联系人分类: 亲人 同事 朋友 其他 *:手机通讯录里面所有的联系人底层都装进一个集合对象里面 -》 ArrayList *:亲人 同事 朋友 其他类型里面所有的属性: char szm;->首字母 String name->联系人名字 int age->联系人年龄 char gender->联系人性别 long phone->手机号码 String zuoJi->座机号码 -》类似: 0531-6661760 *:创建联系人对象的时候: szm name age gender phone是必填内容 zuoJi可填可不填 *:如果创建联系人对象的时候 用户如果没有提供zuoJi属性值 那么将zuoJi变量赋值为"无座机号码" *:如果创建联系人对象的时候 用户如果提供zuoJi属性值了 那么直接将zuoJi变量赋值为用户输入的值 *:所有类里面的属性要求封装 //一个模块一个模块 完测试 测试通过下一个模块 刚进入cmd里面的主界面 -》 6个小模块 A:显示所有联系人 B:查找某一位联系人 C:添加联系人 D:删除联系人 E:修改联系人 F:结束当前所有操作 显示所有联系人 如果用户选择是A 那么有两种选择: 输入校验: 用户可能输进去的不是a/b 要求重新输入 所有的输入都需要进行校验 a:按照首字母进行显示分类: [效果如下:] A 阿磊 1555950427 W 王刚美 18322009876 X 小明 18756789000 Z 张三 15555555555 周凯 18765432189 .... b:按照类别进行分类显示: [效果如下:] 朋友 张三 15555555555 小明 18756789000 周树人 17499990427 张三 15555445555 亲人 王刚美 18322009876 周凯 18765432189 同事 阿磊 1555950427 ... 查找某一位联系人 如果用户选择的是B: cmd面板显示下面这句话: 请问你是通过联系人名字进行精确查找/手机号码模糊查询 这里用户有两种选择: 用户可以直接的输入要查找联系人的名字 如果集合里面没有该用户 直接显示: 不好意思 当前用户不存在 如果集合里面有该用户 需要将用户的基本信息进行展示: [效果如下:] [输入]张三 [显示] 用户的基本信息: 联系人姓名:张三 联系人电话:15555555555 联系人座机号码:0531-6661760 用户的基本信息: 联系人姓名:张三 联系人电话:15555445555 联系人座机号码:无座机号码 用户还可以直接输入一段电话号码-》出现几个数字就可以 如果集合里面没有用户的号码出现这几个数字的 直接显示: 不好意思 当前用户不存在 如果查找到有这个用户存在 显示下面: [效果如下:] [输入]555555 [显示] 用户的基本信息: 联系人姓名:张三 联系人电话:15555555555 联系人座机号码:0531-6661760 添加联系人 如果用户选择的是C: 需要进行输入校验: 1:输入的大首字母可能不是大首字母 是数字 是其他的汉字 2:性别选择的不是A/B 3:注册用户名字的时候 应国家要求 关键字需要屏蔽(...) 4: 输入电话号码的时候 非11为数字 不是数字 不是以138 130 137 158 155 188. .开头 5:输入的年龄非数字 6:选择的分类可能不是亲人 朋友 同事 其他 7:座机可能不是按照 区号-号码的形式传进去的 座机号码的区号只能出现0564 0531 0532 cmd里面直接出现下面的内容: 请选择联系人的分类A:亲人 B:同事 C:朋友 D:其他 请输入联系人名字大首字母: 请输入联系人的姓名: 请输入联系人的年龄: 请选择联系人性别:A:男 B:女 请输入联系人的电话: 请输入联系人座机号码(没有请回复N):N/区号-座机号 当用户依次输入所有的信息之后 产生一个联系人 但是需要判断集合里面是否已经存在该用户 如果存在(只要手机号码相同就认为是同一个联系人) 这个联系人存在不能继续添加进通讯录里面 cmd里面显示:对不起 当前用户已经存在 同一个用户不能添加多次 如果不存在 将当前联系人添加进集合里面 cmd里面显示:添加成功 删除联系人 如果用户选择的是D: 直接在cmd里面先以表的形式将所有联系人的信息显示出来: [效果如下:] 编号 姓名 年龄 电话 0 张三 22 155****5555 1 小明 18 187****9000 2 王刚美 28 183****9876 3 阿磊 24 155****4278 4 周凯 38 187****2189 5 周树人 99 174****0427 6 张三 22 155****5555 cmd里面显示:请问你要删除联系人的编号: 输入校验: 需要对当前输入的编码进行判断 是不是数字 如果不是 需要重新输入(从新输进去的内容还是需要进行输入校验) 如果集合里面有该编码对象的元素 从集合里面将当前编号的联系人删除 并在cmd里面显示删除成功 如果集合里面没有该编号对应的联系人 cmd里面显示:对不起 没有该编码对应的联系人 修改联系人 如果用户选择的是E: 输入校验: 修改之后的姓名还是不能出现关键字 修改之后的电话号码还是只能以155 159...开头 修改后的大首字母还是要判断是否合法 可能用户不是按照格式正确输入 XXX-XXX-XXX(无论是修改前的输入还是修改后的输入格式需要正确) [效果如下] 请输入你要修改联系人的姓名大首字母 姓名 联系电话(中间-隔开):Z-张三-15555555555 请输入修改后的联系人的姓名大首字母 姓名 联系电话(中间-隔开):L-李四-18900000000 找到集合里面对应的联系人将信息修改掉 修改完毕 显示修改成功 如果集合里面没有找到叫张三的联系人 显示修改失败 没有查找到该联系人 结束当前所有操作 如果用户选择的是F: 直接结束当前所有的操作 -》 break

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值