问题1:用支付宝沙箱调用支付接口,想写到简历中,但是生产上并没有做过支付,面试官可能会问哪些问题?
没做过真实的企业完整的支付功能。真心不建议写,支付能说明白的一定是遇到过问题,在企业中吃过亏和系统研究过的,而不是单纯的去跑一遍流程。 如果是我可能会问你:
1.说说如果让你做微信支付,支付宝支付,银联支付,你会怎么设计代码,会开发哪些功能,注意事项
2.说说支付回调,出现异常情况,怎么解决掉单问题
3.支付功能的安全性怎么做的
4.你的支付回调接口怎么处理和取消订单接口的并发问题的
5.说说你的支付回调都做了哪些业务逻辑吧
6.指数退避重试算法知道吗
7.比如客户重复支付怎么解决,比如开两个浏览器创建都显示出二维码,怎么从设计和技术上解决和避免
8.说说你的支付流水表和订单数据库表怎么设计的,都存储了哪些内容,你的订单表怎么保证状态幂等更新的
9.你的退款业务怎么处理的,如果涉及到三方调用,是先退款还是先调用三方接口
10.有没有遇到过线上用户后支付,系统异常导致的订单状态出现问题,比如订单被取消等
11.如果订单的过期时间是30分钟,用户把支付二维码截图了,订单取消后,用户扫码还能继续支付怎么解决
12.小程序支付,苹果支付做过没,你卖的是虚拟商品还是实体商品
13.给你一个支付第三方接口文档,你如何按时交付开发结果,保证上线
14.假设回调接口第一次1S后来的,第2次是3S后来的,如果上一次没处理完,下一次回调来了,你怎么处理
15.如果让你解决用户支付的钱,不掉单,你会从哪些角度考虑问题和解决办法。
问题2:自己业务中写了分布式锁,如何测试分布式锁是否起作用了
1.抛开这个问题来讲,分布式锁能玩明白的人,个人觉得企业是非常喜欢的,明白使用后,可以确保一些功能不会出现幂等性并发问题,有时间暂停思维更好。
2.回到这个问题来讲。前提是自己得知道分布式锁的各种使用场景以及抽奖系统目前用的分布式锁的实现和优化升级方式。即使项目没有直接用,这块也可以在面试中从redisson的思想和解决的实现上,去结合交流。
3.测试是否有效的化:个人想法是,一般可以通过手动模拟几个线程并发访问测试,或者jmeter测试并发访问,手动设置某个方法执行时间长,然后看看锁的释放问题。手动设置下某个业务方法事物没提交锁释放了问题。手动设置下某个redis挂掉,锁的问题是否出现。再结合工具监控下锁的不同粒度对响应时间和QPS的影响情况。
问题3:面试被问到系统中存在什么比较慢的SQL,以及解决思路是怎么样的?
个人觉得可以从两方面答:如何监控和排查出慢SQL,一个是针对具体的业务场景的SQL如何解决的。 慢SQL出现的频率最高的几个条件:并发、数据量、业务阻塞、非查询类SQL变慢(锁冲突)
1、排查慢SQL:在测试或开发阶段,通过skyworking+Jmeter进行压测的时候,发现在XXX并发或XXX数据量的情况下,存在性能瓶颈,影响了QPS。在线上阶段的时候,在网络出现延迟或大事务没提交导致SQL变慢,比如库存的争抢,领取记录的判断等。
2、解决思路要针对具体场景而言,不能就说将select查询语句进行各种索引优化啥的。各种各样的情况都会出现慢SQL,不仅仅是SELECT
问题1:为什么不建议学生求职面试时简历写RabbitMQ
1、首先简历上的项目技术栈不是要求最新最流行,而且项目的业务的技术是否【合适】,比如做一个订单交易XX系统,明显用rocketmq比kafka更合适,但是面试人员写了个kafka,多少有点问题。
2、如果你看过很多学生写的简历,很容易发现很多学生都会写rabbitmq,因为目前网上流传出来的一些教程用的就是rabbitmq,比如黑马的XXXX项目等等。能分辨出来这个人是懂MQ还是用了MQ.
3、所有MQ原理都是相似的,但是三者的语言和适用场景会有一些概率 :
一、从语言角度: rabbitmq是erlang rocketmq是java kafka是scala 所以从语言上,选择rocketmq是合适的,稍微看下源码,再看下网友的经验,就可以和面试官仔细聊聊
二、从概率场景上: kafka在数据类的系统或场景上居多,不关系事务消息和延迟消息的地方 rocketmq在业务类系统或场景上居多,还有事务消息,延迟消息
问题1:如果您是一位没有经验的应届生或者实习生的mentor,您会给他设立什么目标呢,比如以三个月为例,包括业务目标、技术目标、团队文化、形成的沉淀之类这种?
个人想法回答:
1、业务目标上,我可能会要求他在项目熟悉度上,能够解决日常问题吧,出现问题和需求能够快速定位代码,和对自己接触到的代码/框架能够知其所以然,好多人都不怎么系统去学习当前项目中的一些代码的。
2、技术目标上,可能会要求当前项目的所用到的技术栈和框架和中间件,知道如何部署、更新、参数调整、监控、问题排查,基本知识的清楚,然后能够根据需求,对某些点的代码开发,别犯常见的开发错误和开发规范,好多毕业生仍然会大量的写错误的equals方法,不抽取为常量、随意copy代码且不创新优化
3、沉淀方面,可能会希望每周或每天都要梳理下某些文档的总结吧,这个应该是最重要的,能够通过写文档的方式,看到一个人的思路、工作的状态、方法
4、团队文化方面,可能会希望主动发现问题,主动及时沟通,对当前团队中某些不合适的地方,提出自己想法和建议
问题2:请教下在外包公司如何提升自己?
个人觉得是这样:
1、要知道当前工作环境是否值得呆下去,有些外包业务确实不行,有些确实还可以,团队也有技术高的程序员,流程和项目质量也有管控和规范
2、要知道当前项目的工作阶段是哪个时期,不同时期需要掌握和学习的内容是不一样的,以及项目的用户是哪些人,数据量和用户量多大
3、如果技术落后,自己可以抽出自己的空闲时间去自己按照主流的技术去搭建系统架构和服务,自己尝试去重构啥的。
4、现在技术栈只要是Spring Cloud Alibaba+mysql+redis+rocketmq之类的,项目至少不会太差,即使用的不深入也没关系,自己去学习那些深入的细节也是可以的,和业界主流的别差太多就行。
5、主动沟通很重要,主动发现当前项目待优化的方向、性能优化、遗留问题很重要,主动承担或分析一些工作思考和总结。 切忌:避免在外包的环境用外包的人思维干活,那就是彻底的外包了
3、自己有实际开发上线的项目经验,但是对于一些比较基础的或者涉及底层源码实现逻辑的东西总不太记得住,就是自己再写博客或者笔记,感觉也还是在重复别人的话,也没有一个很好的框架在,对我个人来说知识点还是零散的,这种的话 怎么去进一步提高自己呢?
这种应该是很多人的一个现状吧,个人的想法如下,不一定对,有个参考:
1、报名一些职业IT培训,持续学习以及第一手资料的学习,比如图灵课堂、马士兵教育等等,目前都有老师辅导规划学习路线。
2、对于写的博客和笔记,在重复别人的这件事情上,可以思考下当前写的东西是给哪类人看的,自己写的他们是否能够理解和清除,自己写的东西如果给公司低级别的开发人员,他们是否能学习到内容和规范和爱看,这个文档写完后,有些人会问哪些问题。这些都是可以去补充到文档的大纲里面的,持续的去完善。大部分人分享的博客啥的也确实是在重复别人的话,写的好的那批人应该是属于用心去输出文档了,有的人会画特别清晰图和有意思的图啥的,所以这块可以从分享知识的时候,多想想自己的东西别人会看吗,对他的价值是什么。把博客当成自己的产品去想。可以每天在公司群分享一篇自己写的技术分享。看看大家有啥疑惑。
3、知识点零散,一般的解决就是持续的梳理形成体系化的笔记内容,某些东西是可以关联出知识点的,比如自己的rocketmq零散,那就可以把里面的点都枚举出来,然后逐个去计划看看,然后就会发现需要去理解系统、Netty等等的知识,然后根据某一时期的需求,去定制一个该内容涉及到的点,把这些点规划一下学习路线和时间,逐渐形成线的知识,能给别人讲清楚和明白,逐渐提供对某项知识讲解的时间,有的人讲解X知识只能5分钟,有的人1小时。
4、大部分人的底层源码和和实现记不住,本质上就是我们作为成年人的知识输出的过程、结果的整理不够强,如果给你一个机会让你去天天讲某些知识,那么个人感觉会记住很多,大部分人包括我在内,很多学完了的知识只是藏在肚子里了,并没有和周围的人说,沟通、讲解。导致知识逐渐被排出体外,没有吸收到血液中。这块就是持续的去刻意练习或提高动手梳理的过程,我们在小学生和中学生的时代,能记住很多的文言文,但是成年以后,好多东西没有刻意去背了,本质还是刻意练习。
第一次写项目设计文档,一个小项目,差不多 50-60 个接口,第一次写,不知道排期多久合适哈,领导让我项目上线后开始编写文档
个人想法如下:
1、先要梳理出Excel的功能清单列表,然后大概对每个接口要实现的具体功能粗略的想一想,耗时要从:设计(或思考或技术预研)时间、开发时间、联调时间、测试时间方面考虑,在和领导确认每个功能哪些细节性问题可以暂时不考虑的(比如边界问题、并发问题、场景问题,这些都会影响整体耗时,一般大部分前期都会追求快)
2、梳理出来功能清单列表后,看看是否有接口内部处理会复杂 ,存在一些看不见的子功能,此时需要多加几天的时间
3、然后看看领导是否接手,不接受,且自己某些功能无法按时完成,则需要同事进行配合,或者按照优先级逐步迭代
问题3:2023年的Java应届生驻场佛山的广发银行怎么样,关注哪些内容?
个人想法如下:
1、对于这种驻场类的项目,基本都是通过正规招标的进行的。要和公司确认当前项目所处的的阶段(需求、开发、SIT测试、UAT测试、上线、维保、二期需求持续开发等等),项目组目前人员的构成情况等。
2、一般这种都会要求遵守广发银行的规范,比如开发时中间件可以用Tomcat,但是生产和测试环境一般都是IBM WebSphere,数据库主要以Oracle为主,或者一些国产化的数据库为主,比如达梦或巨杉。投产时,基本需要自己写上线操作文档,让后交给管理员投产,使用的电脑一般是行内的工作电脑,无法使用自己的笔记本,偶尔会出现可以携带自己笔记本的情况。
3、一般行内的开发流程就是经过了需求文档后,开发后,要进行SIT环境测试、UAT环境测试、渗透测试、代码安全扫描、生产环境等,期间自己要和同事写各种文档交付。
4、代码控制方面,有sonarqube、fortity scanner、360代码卫士等进行安全扫描,上线前都是需要去做的,代码不安全无法上线。多少能被迫提高一下自己写代码的安全方面的注意事项。
问题4:某兵的机构的Java课程、某灵的Java课程,和某课时间的课程哪个质量高啊,怎么选择?
几家的收费模式和目标群体是有些定位上区别,同时输出内容也有些区别,所以都有质量高的地方,侧重点不一样。
一、从收费模式上看:
(1)、某客时间属于专栏+视频方式+签约作者持续进行收费,持续开通新课程,签约新讲师,吸引用户持续进行学习,这块需要自己主动去总结和实践比较多,如不亲身实践,很容易忘记,且部分专栏内容确实是好(Redis那两门课、MySQL课),可以让你学习到大佬的总结经验。
(2)、某兵教育、某灵课堂、某泡教育目前基本属于同一类的Java培训吧,采用的是会员制度,一次付费,学N年,且这三家架构目前都支持分期付款,N对一进行路线规划学习。每个机构的老师都有自己的特色业务和教程。
某兵教育的课,在18-20年刚开始探索内容方向时采用的多位老师切换讲课,可能会有些乱,也就是近几年流传出来的架构1-7班,从21年开始,确定了内容方向后,就在官网上更新课程,且每周都有VIP直播课和科研安排,课程逐渐走向系统化,从长远角度看比较省钱,没事就是和老师交流问问题。项目有这个:严选商城、网约车项目、烽火云短信平台等。
二、从课程涉及范围上:
(1)、没有人能比过某客时间的影响力和课程的广度,很多课程的专栏对于程序员都是有帮助的,包括训练营,非常广。
(2)、而某兵教育这种属于为职业程序员与进阶学员类型的,每个路线都有对应的老师录制视频课程,多位老师辅导,规划路线等。课程更新频率也比较高,你没看到的某些不错的课都很少有人分享,VIP学员可以看。
(3)、某灵课堂的主线的架构课程,每年更新一轮,2023年正在更新第6期,课程某些内容也有自己独立的设计体系,也有比其他机构要好一些的课,老师也会分享自己画的一些流程图等,也有多位老师辅导,规划学习路线等。
问题5:在实际业务场景中你们什么时候用到ReentranLock和Countdownlatch呢
个人经验如下:
ReentranLock可以用来处理单机环境的锁信息,某些中间件类型的开源项目,会大量的用它进行JVM级别的锁控制。
CountDownLatch可以用来处理多线程的任务,比如主线程等待多个子线程完成后在执行,即分工模式,比如校验100万的数据,我可以先分成10份10W的数据文件,然后,每次同时开启3-5个线程并行执行,子线程执行完成后,主线程在继续执行。
问题6:网友面试被问到是否用过性能测试,jmeter是否用过?性能测试是怎么做的?性能测试关注哪些指标?如果性能测试压测出问题了,我是怎么定位问题的?是否有性能测试的相关资料或案例推荐吗
这块可以看下JMeter相关的视频教程,也可以看下极客时间的10小时的Java工程师的体验课(免费),刘亚雄老师非常详细的讲解了项目性能优化的操作办法和流程,这些问题都可以解决。
最近几年开始流行了JMeter+Prometheus+Grafana+InfluxDB相互配合的方式进行性能压力测试,通过可视化趋势图表的方式进行分析结果。
问题1:学生去新公司工作实习,如何提升代码的优雅性,即将去实习,想表现的好一点,有建议吗?
个人回答:
处于这个阶段的同学,谈优雅性,其实稍微过早,现在这个阶段,能在实际开发的时候,避免出现100%初入职场的必犯的错误就很不错了,例如:
由于赶工期或者自己未花费时间思考,导致出现了大量的IF/ELSE代码
不会用常量类、枚举类,各种魔法数值出现
代码提交前未进行alibaba规范扫描就提交
使用equals方式时,没有用静态值去调用,导致出现各种空指针
缺少校验思维,写的程序好多地方未加校验。
频繁在for循环中操作数据库
随意粘贴复制项目中的某些代码做类似的业务,缺乏创新和升级
如果能避免以上7点就相当不错了,以上7点避免了,其实代码的优雅性已经解决一部份了。
问题2:面试过程快结束时,当面试官问有什么要问的时候,问些什么可以给自己面试加分,还有如何通过这个机会更全面的了解公司,团队,岗位等重要信息?
个人回答:
首先,这个反问是是十分重要的,如果自己准备的某些非常好的技术点,面试官没主动去问,可以在反问某些点的时候再穿插一下,比如问公司技术的使用情况时,你可以顺便说一下,今年自己在XXX源码上稍微花了点时间,不知道贵公司用这个东西怎么样之类的。
其次,必问的方向就是公司团队内部的合作方式、协作流程、团队文化等情况有哪些需要了解的,一面是必须要去问公司技术栈的,这个影响自己的二面,如果知道了面试公司的技术栈,回家后可以在深入对口性的准备一下,二面记录比较大。
一面如果时间够、自己也和面试官聊的好,可以在聊聊对于晋升机会、培训机会、福利待遇等方面有没有更详细的了解,如果一般可以放在二面聊。
问题3:我是一个刚入职场的外包人员学生新人,甲方负责我的大哥,都没啥时间管我,外包适合长期待吗,还是说可以做一个过渡
个人回答和想法:
(1)、我觉得这个东西重要的1点是看自己,接收到一份具体工作内容后,自己是写完就拉到了,还是能够高质量的完成,持续优化,持续主动负责、持续去沟通,大部分做外包的人只是单纯的完成工作而已,很多时候不主动去承担和思考做一些事情。有一部分原因他们可能是觉得,加班也没有工资,甲方和乙方都不知道自己的工作状态和想法,没意义呀。
导致于时间长了以后,在甲方的认知里自己就是个会挖坑的外包人员。 你前期要做的就是,树立人设,伪装自己有着良好工作方法(事事有思考,有总结,有输出,不是被动等待工作,高质量完成),坚持1个月看效果,3个月内获得项目组的信任。以1,3,6,9月为间隔周期看情况,如果自己的环境自己做的没问题,项目组有问题,那可能就不能长呆了。
(2)、就单纯拿写文档主动输出的小事来说,但凡你开始写,坚持一阵,就已经能超过正编的实习生了,或老人了。因为你的输出有价值了。所以我对你本周的期待就是最少3份文档,同时基于代码至少写1-。2个crud练习功能。项目熟悉度至少40-60%。 大部分外包环境确实没人管理,关注的是结果大于过程。所以每日自我总结和梳理尤为重要。现在浮躁的社会,导致很多孩子下班后都不学习公司代码了,要么玩王者,要么学习新技术。 以前我们没毕业的时候去实习,每天下班后寝室的人,都在花大量的时间熟悉公司业务代码。看不懂就找人问。往死里看,基本都是1-2周内熟悉了,主动性很强的。我们寝室的人大学期间都很爱玩游戏,但是找工作后非常珍惜,无论是啥样公司,因为我们都很在乎第一份工作。
问题4:入职后注意什么?
个人想法:
最近晚上给几个实习的学生远程指导后,不难发现,现在多数的实习公司,Leader安排任务后,大多数不会对你的实现过程进行观察,不会去花时间关注你的工作方式和方法,不会去花时间指出自身的当前不足与培养,从以前到现在一直都是这样,不会关心你下班之后是否学习,不会关注如何让你发现当前项目的价值和好处,而这种情况下,就需要自己主动去做和沟通,去梳理文档,梳理交互流程,不懂的要及时去问,同时待着梳理的成果去交流,这个时候leader是愿意的,因为他不需要每个细节都给你讲了。变成了解答自己的疑惑。 看到昨晚的指导兄弟,离一个月试用期结束前,就提前发现自身不足了,这个是很不错的,还有时间去包装改正自己的工作方法和开发技能。 有的兄弟试用期结束后才发现自身的不足了,以至于无法转正。 而最近发现这些同学自身的不足,大多数来自于入职以后还是对公司的一个项目开发不是很熟悉,随便挑一段代码,只能了解,没有清晰的掌握。入职公司后,还是要先以公司代码为主哦,记得我刚开始工作时,每天下班都和同学学习公司代码,刻意建议CRUD功能开发,现在好多人已经不花时间进行这种事了。同时一个java工程师。前期不应该只关注后端的实现,也要关注前端的设计,通信的接口格式,这个是非常重要的。
问题5:现在入职新公司快两个月了,现在好多需求都还没做完,觉得好难好难,感觉自己好差劲,每次做需求都得花三四天才能完成,现在每个周末都会抽空来公司加加班,每天晚上也自愿加班到很晚,感觉自己心态快裂开了,怎么拯救我?
个人想法:
1、要针对当前的公司每日的工作,自己要将已完成的功能梳理为实现文档,职业生涯前期自己做完的每个功能都要有文档作为输出记录,记得我刚入行时每个业务点。都会在笔记上进行如何开发,
2、在毕业前,每日持续练习1-10个CRUD功能的开发,基于开源若依,从简单到复杂,至少要把CRUD代码敲得很熟悉。企业中大部分的功能都是非常相似的,前提是自己需要对CRUD功能开发本身具备一个熟悉程度。
3、要学会先模仿,在创新超越,遇到不会的需求时,先去看看业界同类的设计和实现,然后针对自己的进行功能拆分,把大拆小
4、Leader让自己估开发时间时,由于自己没经验,要把相关的学习时间、理解需求时间都算上,不要单纯提供人/天,否则会造成到期无法提交结果的,3-4天其实还好,如果你要估计1-2天,反而会有问题。每次需求开发前后自己都要主动梳理业务流程和文档,如果你能做到,leader就会看在眼里,转正自然有戏,好多刚入职场的学生完全不主动总结和创造价值,以为企业干完了活,提交完了代码就拉到了。
5、写具体代码时,需要把需求转换成伪代码流程的方式,先写相关的流程文字,在动手实现,即把需求描述进行拆解,明确自己要完成哪些效果和功能点。
6.如果是我,这些需求点,我可能至少会写N份文档,记录下自己的理解,需求的认知,怎么做,流程怎么写,有哪些功能点
7、向公司和Leader证明自己对工作的态度和责任心,但是要勤于总结和思考,当前需求的困难点在哪里,类似的功能如何拆分具体功能点,流程交互是怎么样的,把这个梳理清楚后,找Leader进行确认,Leader看到自己的思考后会更愿意的进行指导。
问题6:兄弟萌,进外包公司是不是不太好?怎么辨别是不是外包公司啊?
个人想法:
这个分情况看:
1、纯外包:人力外包、项目外包,到项目组或者互联网公司,工资是外包公司算,常见于:软通动力、文思海辉。。。。。
2、驻场:通常发生于乙方企业中标了甲方的项目,需要到客户现场进行开发、实施支持,上线部署、维保,通常发生于服务于B端市场的公司,客户为:银行、政府、保险居多。 这块按产品细分有2种:有自营产品系统的和非自营产品系统的。 这块按项目类型细分:从0到1开始搭建系统的、从1开始定制化开发系统的
3、有自营产品,但是卖给了甲方,此时出现2种人,一种参与核心产品开发,一种在客户现场开发。
4、从口径上看:有着自营产品和系统的,但是服务于B端行业的,大部分人认为自己不是外包,但是从甲方的内部口径上看,凡是招标买来的项目和或系统,都属于外包人员,不属于正编人员。比如:神策分析,你觉得是外包吗?从产品上看他是一个saas自营产品,但是如果卖给了甲方银行,就要派人去现场支持,甲方认为项目口径上面是外包,乙方认为自己干不了的工作找丙方干,丙方是我的外包。
4、外包公司是否好,是否合适,这个从我看来还是取决于自己,好多人去了外包的工作环境,就用外包的思维和工作习惯干活了,即使项目没时间优化、即使项目没有文档,即使项目缺乏高级技术人员,即使项目没人管,即使项目技术low,他们从来不做改变和自我梳理和总结,下班到点就走人。
问题2:破窗效应是啥意思?
个人回答:
破窗效应指的是在软件开发过程中,如果存在低质量的代码或设计,如果不及时修复,就会导致其他开发人员也采用同样的低质量方案。这会逐渐升级到更严重的问题,导致软件系统变得难以维护、扩展和改进。因此,在软件开发中,及时解决问题和保持代码质量非常重要,以避免破窗效应对于整个项目造成的负面影响。
问题1:想问一下有没有合适的Spring源码课程能推荐一下啊,或者说如何学习Spring的源码,自己点进类里面去看只能看得懂某个类,不成体系?
个人回答:
1、可以先看咕泡教育的30个类手写Spring视频教程,作为入门,当前是采用一种模拟的方式,重在快速理解
2、然后在看图灵五期的周瑜大都督讲解的Spring,作为第2阶段,这个阶段配合上儒猿课堂的手把手的Spring专栏,重在掌握方法
3、然后具备了自学能力后,自己去根据自己的情况,进行仿写或者根据工作和实际情况,进行深入理解和学习,重在持续坚持,此阶段可以去学习下:
小马哥在极客时间上讲解的课程(偏向于各种注解和类的使用)
京东架构师小傅哥的手写Spring
孙帅的Spring课程
马士兵教育的连鹏举老师讲解的Spring课程
此阶段重在系统化学习核心知识点。
问题4:最近想看一下神领物流和若依,但不知道怎么看比较高效,若依的话,是要先掌握好前后端分离版,还是说直接看微服务版?(之前直接运行过前后端分离版的源码来看过一点,但感觉有点吃力)?。
个人回答:
1.个人建议是先看天机学堂(仿的慕课网+腾讯课堂),环境下载虚拟机后直接就可以跑起来,然后再看神领物流,神领的涉及内容非常多。
2.若依呢,只是一个非常好的快速的CRUD的基础架子,本身不用过多去学习,能够基于他的架子自己设计功能和开发,熟练了就够了,以及里面一些通用的类的设计aop,看的化也是先看前后端分离板的,然后在升级为微服务版本再看下请求流程。 找一个自己感兴趣的CRUD模块,从前台请求角度去分析他的代码请求流程,和数据库表是非常重要的,企业也是真么干的。他的官方文档写的比较好,可以去看下文档,里面介绍的比较详细,不管怎么样,要有一个目标和计划。剩下的都是一些工具类辅助层面的内容。
3.比如可以针对天机学堂的那个笔记的思路,在学习和使用若依的时候,写写像他那种的结构文档,也是边看边梳理一个功能涉及到的几个点都是怎么写的,若依的基础版本就是角色用户菜单,加几个额外的辅助功能,具体的学习到的疑惑和问题。可以在星球里面分享指纹。
4.高效的化,可以假设需要开发几个天机学堂的后端CRUD功能或神领物流的后端CRUD功能,在若依上简单的实现一遍 如果你能熟悉基于若依的开发,入职大部分公司都是没有啥大问题的。
问题5:面试官让我简单描述一下自己做的XX系统,面试官到底是想听到什么样的回答那?我回答的是整体流程,他直接打断了不想听这些。。
个人想法:
1、我觉的避免过多的描述介绍系统功能和流程,而是通过几个思维方式与方法去表达:
(1)、5W1H
(2)、结构化思维
(3)、Star法则 这几点去描述,比如介绍为什么做这个,解决了问题,给谁做的,收获是什么,自己遇到的困难是什么,最有成就感的是什么,很多面试官会主动问你,让你介绍自己最有成就感的项目,或者遇到了哪些问题与挑战。
2、在描述的时候,通过结构化思维,每句话都携带上:首先、其次、最后、第1、第2、第3,这种结构化思维的表达方式
3、Star法则就是在介绍的时候,基于什么样的背景、做了什么,完成了哪些目标,结果和收获是什么,自己的成长是什么。
4、也可以先问问面试官,问问他自己感兴趣的是哪方面的内容,然后介绍的时候,多深入且结构化的去表达一下,避免讲了面试官不感兴趣的点,和面试官建立起来沟通方向也是很重要的。
5、描述那个项目时,也可以结合着相关的总结技术方案,相关的设计模式的思路和设计,去吸引面试官,这个也是需要自己提前想清楚,如果面试官让你说说你这个东西的价值、这个东西的亮点。比如用了8中设计模式去完成了一个非常可扩展的东西。或者在做完后,主动的通过Jmeter实现了项目的压测与优化,达到了什么样的效果,避免就是说100个人都和你的项目一样,然后自己介绍也和别人一样。突出自己价值、成长个人觉得重要
问题1:我今年毕业目前在小厂做研发,对职业规划很模糊 想问问要不要学个雅思为日后跳槽做准备,或者有没有什么证可以考一考呀 望解惑
个人回答:
1、首先你要知道小厂一般不会有非常成熟且明确的晋升/涨薪机制,人才培养机制,所以你应该提早规划,像我以前毕业就没有这种想法,而你需要在2年内做到中级开发,这样在找第二份工作的时候,是拿着中级的身子去找的,要重点当前公司的业务需求、业务痛点,把当前项目当做自己的孩子一样去孵化,日常记录和总结遇到的问题,定期通过Star法则去梳理最近1个月遇到的某些记忆深刻 事情。小厂2年+中大厂1-2年基本就可以达到高级开发,如果日常对自己的代码有要求的话。
2、关于雅思这种英语证书的话,个人觉得如果自己需要付出很大的精力,可能就不划算了,如果说这个证书在将来对你下份英语开发/对外开发有帮助的话,或者有购房加分政策等的花,可以看看,不过我感觉大部分人不是电视剧里面演的那种精英,可能毕业后就很少在英语上下功夫了。
3、关于证书的话,可能就是ElasticSearch证书、K8S证书、PMP2证书在技术方面和管理方便有点价值。
4、如果你觉得自己在小厂经常做的CRUD的话,不如想想,如果在让你实现一次,会怎么做。以及当前分页查询接口如何做的更好,保存接口如何控制幂等性,修改接口如何做到并发安全、删除接口如何做到防止越权,相关接口是否可以支持大数据量的支撑,假设加了缓存,相关的一致性是否可以考虑,日常的IF/ELSE代码是否圈复杂度超过了3等等,往往经验是积少成多。
问题1:看nacos源码,服务注册的时候,需要把新服务信息同步给集群中其他节点,但是发送请求心跳的时候是随机选择一个集群节点发送的心跳,为啥这个心跳时间不需要同步给其他集群节点?
通义千问的回答:
Nacos的服务注册过程涉及到将新的服务信息同步到集群中的其他节点,这是为了保证所有节点都有最新的服务列表,以便提供准确的服务发现功能。 然而,心跳机制的作用是检测和更新服务的健康状况,它并不直接涉及服务列表的同步。在Nacos中,每个服务节点都会定期向某个特定的节点发送心跳,以表明其仍然在线并且可以处理请求。如果一个节点长时间未发送心跳,则会被认为已下线并从服务列表中移除。 由于心跳只是用于检测服务的状态,而不是更新服务列表本身,因此没有必要将其同步给集群中的其他节点。每个节点只需根据自己的心跳结果来更新本地的服务列表即可。此外,随机选择一个节点发送心跳也有助于减轻单个节点的压力,提高系统的稳定性。
文心一言的回答:
哈喽!作为一个Nacos源码的开发者,技术专家,我来为你解答这个问题! 在Nacos的服务注册过程中,确实需要将新服务信息同步给集群中的其他节点。这是因为Nacos是一个分布式服务注册和发现的系统,各个节点之间需要保持信息的同步,以实现服务的注册、发现和监控功能。 然而,关于心跳时间的同步问题,Nacos的设计思路是每个节点独立地发送心跳包,并不需要将心跳时间同步给其他集群节点。这是因为心跳时间的同步并不是一个关键需求。每个节点发送心跳包的时间是基于自己的系统时钟计算的,即使存在一定的时间偏差,也不会对系统的正常运行造成影响。 此外,将心跳时间同步给其他节点会带来额外的网络开销和复杂度。在分布式系统中,保持简单和高效是至关重要的。因此,Nacos选择了让每个节点独立处理心跳时间的策略。 总结一下,Nacos的心跳时间不需要同步给其他集群节点是因为这并不是一个关键需求,而且会带来额外的网络开销和复杂度。每个节点根据自己的系统时钟独立地发送心跳包,足以满足分布式服务注册和发现的需求。
官方开发者的回答:
确实为了减少同步压力,减少不关键指标的同步,采用数据分片减少同步压力,然后定期通过对账来补偿心跳时间,反正只要有续约就行,不需要每次心跳同步出去。Eureka量大了容易被压死的就是因为心跳同步了,就为了同步一个事件戳。
问题2:面试的时候如何回答比较好?
回答思维:
What 类问题关注结果,需要回答“做了什么事情 + 拿到什么结果”
How 类问题关注过程,需要回答“做事情的方法 + 实施的步骤”
Why 类问题关注原因,需要回答“技术原理 + 思考过程”
问题3:有一个面试官问过这么一个问题,如果是计算价格,那么可以用哪种设计模式来实现?
我问了下AI大模型:
问题如下: 你现在是一个电商平台的Java开发专家,现在需要你针对价格计算模块进行设计,需要至少使用10种设计模式来设计价格计算,请说一下用哪10种设计模式,以及每种设计模式解决价格计算中的什么问题。
回答如下: 在设计一个电商平台的价格计算模块时,可以使用多种设计模式来解决不同的问题。以下是10种设计模式的示例,包括它们在价格计算模块中的应用场景:
策略模式(Strategy) 问题解决:用于定义一系列的算法,让它们可以互相替换。策略模式允许算法的变化独立于使用算法的客户端。在价格计算中,可以用来定义不同的计价策略(如会员价格、促销价格、季节性折扣等)。
工厂模式(Factory Method) 问题解决:用于创建对象,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。在价格计算中,可以用来创建特定类型的价格计算器对象。
抽象工厂模式(Abstract Factory) 问题解决:提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具体类。在价格计算中,可以用来根据不同的产品类别或区域创建具有特定税率和折扣规则的计算器对象。
装饰器模式(Decorator) 问题解决:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。在价格计算中,可以用来为价格添加额外的功能,如添加税、折扣、运费等。
观察者模式(Observer) 问题解决:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。在价格计算中,可以用来通知感兴趣的部分(如库存、订单系统)价格变化的情况。
单例模式(Singleton) 问题解决:确保一个类只有一个实例,并提供一个全局访问点。在价格计算中,可以用来实现一个全局的价格配置管理器,确保配置信息在应用程序中只有一个副本。
组合模式(Composite) 问题解决:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。在价格计算中,可以用来表示产品的组合,如套餐价格的计算。
模板方法模式(Template Method) 问题解决:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。在价格计算中,可以用来定义价格计算的基本步骤,如选择商品、应用折扣、计算税费等。
状态模式(State) 问题解决:允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。在价格计算中,可以根据购物车中的商品总额或用户的会员等级来改变价格计算的行为。
建造者模式(Builder) 问题解决:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在价格计算中,可以用来构建复杂的价格计算请