编程导航期刊文章话题讨论

期刊文章

7 参与
分享

快来分享你的内容吧~

点击登录,快来和大家讨论吧~
表情
图片
话题
打卡
综合
交流
文章
问答

【面试】阿里、美团和拼多多面经分享

阿里巴巴: 一面 二面 交叉面 hr面 美团: 一面 二面 拼多多: 一面 二面 阿里巴巴: 时间线:3.8投递,3.10测评,3.15笔试,3.25一面,3.29二面,4.4交叉面,4.20 hr面 具体问的问题可以参考附件,总体来说阿里的面试体验很好,但是对综合能力的考察非常到位: 从简历入手,从深度来说会问对于某个技术的理解,源码以及计算机基础(考研四大件和算法),从广度上来说会问各个技术的对比,架构的对比理解,各大公司的业务以及语言对比,比较好的是不会一直追问,如果回答得不好了解的不多就会换一个话题,没有碰到过手撕代码 比较特殊的是hr面,阿里hr对于部门业务以及一些技术非常了解,对于目前国内国外大事以及技术上的新成果也有所涉猎,所以面试起来并不是很轻松,根据反馈,她比较在意面试者的学习能力,团队合作能力以及经验,表达沟通能力,以及对技术的热爱和关注度,如果有面试阿里的同学注意复盘之前的面试,有可能hr会问同样的问题 美团: 时间线:3.5投递,3.11笔试,3.28一面,3.31二面 美团的面试体验也很不错,仅次于阿里,整体来说美团面试聚焦于项目,两次面试都是围绕项目,项目使用的技术,项目使用的框架架构,更多的在于技术和业务的思考(为什么要用MQ,项目使用了RBAC权限模型,有了解过其他模型吗),几乎没有宏观层面的思考问题,然后几乎都会有手撕代码环节(算法,数据结构,SQL不定) 拼多多: 时间线:2.28投递,3.5测评,3.12笔试,3.25一面,4.1二面 拼多多的面试是另一种极端,整体感觉像是压力面试,问的问题也更多是基础八股,一般都有手撕代码环节,和美团代码题不同,拼多多面试官会仔细看你的变量命名以及代码规范,特别的是面试官会把“接口,功能”等词换成“玩法”,也算是给紧张的面试增添了一份乐趣。 总结一下,三个公司三种面试风格,阿里范围最广,几乎什么都会问,美团更在意项目以及业务,拼多多更喜欢问八股以及基础知识。 比较难过的是美团拼多多都挂了,拼多多应该是面试未通过,美团大概是排序挂,阿里hr说因为部门架构在调整还需要等待。可能会先接其他offer了,先去一些中厂吧,秋招再继续。希望这次分享能对大家有所帮助

【求职】面试模版分享(自我介绍环节)

哈罗大噶好,我系贺生啊,一想到明天还要上班我的内心充满了痛苦😭,但是还是想趁着今天休息跟大家做个分享~ 上次发了自我介绍之后,很多鱼友对我的"面试自我介绍大杀器"非常好奇,虽然叫做大杀器会有点夸张😁但是这个自我介绍确实非常顶,亲测不管是大厂还是国企的一面二面,群面高管面,通用通杀,几乎是没有败绩。而且!划重点!这是个能复制的模版,大家可以根据自己的情况修改优化,最后形成一套属于自己的自我介绍。 但是,这个模版目前比较适用于工作经验三年内的人使用哈,三年以上的资深可能就不太适用了 话不多说,直接进入正题 面试前记得先礼貌问候一下面试官。如果面试官在你之前先做了自我介绍,那你可以加个前缀:“x 老师你好,很荣幸今天被您面试”,不知道姓名的话就直接称呼为面试官。这一步看似不起眼其实还挺重要,给人留下一个谦逊温和的印象是很有好处的。 然后介绍自己,这里的介绍包括自己的性格,爱好,过往的经历等,目的就是让对方大概了解你。最好控制在3~5句话内。介绍的时候切记只说自己好的,牛的,强的,和别人不一样的方面!反正千万别太“耿直”说自己的不足。在心理学上有个术语叫“首因效应”,就是说第一印象非常非常重要,几乎决定了后面别人对你的看法。所以在这个时候说自己的不足只会留下欠缺的印象,并不会让人觉得谦虚。 总之就是学校好就报学校,经验丰富就提经验,性格好就说性格。注意别说长了,这只是开胃小菜! 简单的介绍之后正餐来了:聊自己的成长。 有的人可能会笑,who TM cares 你的成长?面试官招人是为了干活,不是让你成长的。但是这就是误区所在,除了重复单一的流水线工作不需要成长之外,其他所有工作都需要成长,程序员尤甚。新技术出了,得学吧,bug来了,得改吧。没有成长意识就意味着你永远在原地打转,不会进步,今天改了bug的下次又犯,新技术不学,活就干不了干不好。公司也怕啊,员工效率太低了,屑老板怎么压榨啊?(bushi) “我觉得我的个人成长和我的职业(学习)生涯是息息相关的”此话一出,面试官虎躯一震。从面人无数的麻木中惊醒,woc这是来了个好苗子?有意思,再听听 接着你就可以开始从面试官最关注的几个方面:技术提升,思维转变,习惯养成娓娓道来了。 举个🌰:(有工作经验版) “我的第一份工作在xx公司做xx工作,在这家公司我收获了很多。技术上有了很大的提升,balabala,除了技术的提升,还有思维的蜕变。balabala。xx公司的xx文化也让我受益匪浅,塑造了我balabala的习惯” (大家根据自己的情况往上套就行,控制在8~10句话之内) 然后,继续另外一个王炸💣!用三个关键词形容自己。 “如果用三个关键字形容我的话应该是xx,xx和xx。” 这句话我称之为绝杀[奸笑] 不仅简明扼要的介绍了自己的优势长处,而且还会给面试官留下深刻印象(当然面试官在跟领导推荐的时候也更方便😏) 我形容自己的关键字是“主观能动性”,“复盘者”和“快速学习者”,大家可以自己想想用哪三个词形容最贴切,可以是自己最大的优点长处,可以是自己想成为的人的一些特质,也可以是从小到大被夸奖最多的地方 最后一定要围绕这三个关键词举例子(注意要真实,如果是虚构的被揭穿了就得不偿失了),证明自己确实具备这种特质。 其实,我觉得面试的自我介绍就像是孔雀开屏,看对眼了就猛开屏呗,把自己最好看的羽毛最优美的舞姿都展示给对方,千万不要害羞,不要谦虚,不要把自己的优势藏起来。 希望大家能重视面试的自我介绍,这可能是整个面试中展示自己的最佳时机。好的自我介绍,可能会收获考官好感,进而降低后续面试的难度。祝大家面试顺利,如果有帮助的话就点个赞吧~有什么问题欢迎评论或者提问喔#面试#

如何使用GPT作为面试官,对项目进行详细的面试呢

<html> <head></head> <body> <div class="content ql-editor"> <p><br></p> <h1><strong style="color: rgb(51, 51, 51);">使用ChatGPT模仿面试官,问我做过的云API项目!</strong></h1> <h3><strong style="color: rgb(51, 51, 51);">1.关键词部分</strong></h3> <p><br></p> <p>需要让CHatGPT有一个<strong>准确</strong>的角色定位,以下是我给它的角色定位词:</p> <p>请你作为一个Java后端面试官,请你基于我的项目,问我一些由项目扩展到专业知识的问题,下面是我项目的大致介绍:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>一个提供 API 接口调用的平台,用户可以注册登录,开通接口调用权限,用户可以使用接口,并且每次调用会进行统计。管理员可以发布接口、下线接口、接入接口,以及可视化接口的调用情况、数据。</li> <li data-list="ordered"><span class="ql-ui"></span>使用技术:SpringBoot、SpringClountGateway、Dubbo、MySQL、Http调用、Java、Spring等 。</li> <li data-list="ordered"><span class="ql-ui"></span>补充:其中自己写了一个SpringBoot Start。请你基于以上和专业知识对我进行面试,要求问题不小于15个,不多于20个。</li> <li data-list="ordered"><span class="ql-ui"></span>要求问题真实合理。</li> <li data-list="ordered"><span class="ql-ui"></span>问题难度应当是一个初级工程师的水平。</li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">2.问题部分</strong></h3> <p><br></p> <p>然后下面是GPT给我生成的问题:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>请简要描述一下Dubbo的原理和作用。</li> <li data-list="ordered"><span class="ql-ui"></span>你在使用SpringBoot Start时,是否遇到过什么问题?如何解决?</li> <li data-list="ordered"><span class="ql-ui"></span>我们知道,Spring框架提供了多种AOP实现方式,比如JDK动态代理、CGLIB等。你能否简单介绍一下这些AOP实现方式的区别?</li> <li data-list="ordered"><span class="ql-ui"></span>当一个接口调用发生异常时,你认为在平台中该怎样做处理才能增加用户体验?</li> <li data-list="ordered"><span class="ql-ui"></span>谈谈对于在Spring中使用注解的理解,比如@Controller、@Service、@Autowired等?</li> <li data-list="ordered"><span class="ql-ui"></span>请对比一下Spring的IoC和AOP两个主要概念的区别。</li> <li data-list="ordered"><span class="ql-ui"></span>在项目中,你是如何进行接口的鉴权和授权的?</li> <li data-list="ordered"><span class="ql-ui"></span>当一个接口的响应时间过长时,你认为该如何做优化?</li> <li data-list="ordered"><span class="ql-ui"></span>请简要说明一下Spring的事务管理机制。</li> <li data-list="ordered"><span class="ql-ui"></span>当出现高并发请求时,你认为应该如何优化系统性能?</li> <li data-list="ordered"><span class="ql-ui"></span>什么是分布式系统?为什么需要分布式系统?举个例子说明。</li> <li data-list="ordered"><span class="ql-ui"></span>你了解过什么分布式框架?请简要介绍一下。</li> <li data-list="ordered"><span class="ql-ui"></span>在MySQL中,你是否了解过索引的使用?如果是,你觉得在哪些情况下应该使用索引?</li> <li data-list="ordered"><span class="ql-ui"></span>如何保证接口的安全性?</li> <li data-list="ordered"><span class="ql-ui"></span>在开发过程中,遇到过哪些问题,并是如何解决?</li> <li data-list="ordered"><span class="ql-ui"></span>你是否了解过SpringBoot的优化方法?请简单说说你理解的优化方法。</li> <li data-list="ordered"><span class="ql-ui"></span>我们知道,Java虚拟机提供了运行时数据区,比如Java堆、Java栈等。你能否简单介绍一下它们的作用和区别?</li> <li data-list="ordered"><span class="ql-ui"></span>请谈谈你对于单元测试的见解。</li> <li data-list="ordered"><span class="ql-ui"></span>你是如何进行接口文档的编写和管理的?</li> <li data-list="ordered"><span class="ql-ui"></span>最后一个问题,你认为在你实现的平台中还可以进行哪些方面的改进?</li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">3.回答部分</strong></h3> <p><br></p> <p>下面是我的回答以及GPT的回答,我的回答就比较简陋了...</p> <p><span class="ql-font-monospace"> </span></p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">1. 请简要描述一下Dubbo的原理和作用。</strong></h4> <p><br></p> <p><strong>我</strong>: Dubbo的作用就是像调用本地方法一样调用远程方法,请你细说一下实现原理,关键部分可以附上细节代码(还没有具体学习DUbbo所以就开始了反问面试官模式)</p> <p><strong>GTP</strong>: Dubbo的调用原理分为两种情况:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>通过Netty异步方式进行远程通信,基于长连接方式通信(默认方式)。</li> <li data-list="ordered"><span class="ql-ui"></span>通过HTTP协议方式进行远程通信,每次需要建立连接。</li> </ol> <p>在Dubbo中,远程调用的真正实现是通过调用Invoker接口实现类(DubboProtocol)来完成的,通过以下步骤:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>服务消费方调用接口时,实际上是通过Dubbo的代理对象来调用远程服务。</li> <li data-list="ordered"><span class="ql-ui"></span>Dubbo代理对象首先会在本地缓存中查找相应的Invoker对象。</li> <li data-list="ordered"><span class="ql-ui"></span>如果缓存中已经存在Invoker对象,则直接调用Invoker的invoke方法完成远程调用。</li> <li data-list="ordered"><span class="ql-ui"></span>如果缓存中没有找到相应的Invoker对象,在进行远程调用之前,需要根据接口的类名、方法名和参数类型等信息构建一个Invocation对象。</li> <li data-list="ordered"><span class="ql-ui"></span>构建Invocation对象后,Dubbo代理对象会通过Protocol实现类(DubboProtocol)创建一个Invoker对象。</li> <li data-list="ordered"><span class="ql-ui"></span>创建完Invoker对象,Dubbo代理对象会将其缓存在本地,并调用其invoke方法完成远程调用。</li> </ol> <p>以下是DubboProtocol的部分关键代码:</p> <div class="ql-code-block-container"> <div class="ql-code-block"> /** </div> <div class="ql-code-block"> * 远程调用入口 </div> <div class="ql-code-block"> */ </div> <div class="ql-code-block"> public class DubboProtocol implements Protocol { </div> <div class="ql-code-block"> &nbsp; &nbsp; </div> <div class="ql-code-block"> &nbsp; &nbsp;public static final String NAME = "dubbo"; </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; &nbsp;/** </div> <div class="ql-code-block"> &nbsp; &nbsp; * 服务端接口暴露 </div> <div class="ql-code-block"> &nbsp; &nbsp; */ </div> <div class="ql-code-block"> &nbsp; &nbsp;@Override </div> <div class="ql-code-block"> &nbsp; &nbsp;public &lt;T&gt; Exporter&lt;T&gt; export(Invoker&lt;T&gt; invoker) throws RpcException { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; &nbsp;// ... </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; &nbsp;/** </div> <div class="ql-code-block"> &nbsp; &nbsp; * 客户端引用服务接口 </div> <div class="ql-code-block"> &nbsp; &nbsp; */ </div> <div class="ql-code-block"> &nbsp; &nbsp;@Override </div> <div class="ql-code-block"> &nbsp; &nbsp;public &lt;T&gt; Invoker&lt;T&gt; refer(Class&lt;T&gt; type, URL url) throws RpcException { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; &nbsp;// ... </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> &nbsp; &nbsp; </div> <div class="ql-code-block"> &nbsp; &nbsp;/** </div> <div class="ql-code-block"> &nbsp; &nbsp; * 客户端调用远程服务 </div> <div class="ql-code-block"> &nbsp; &nbsp; */ </div> <div class="ql-code-block"> &nbsp; &nbsp;@Override </div> <div class="ql-code-block"> &nbsp; &nbsp;public &lt;T&gt; Result invoke(Invoker&lt;T&gt; invoker, Invocation invocation) throws RpcException { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; &nbsp;// ... </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> } </div> </div> <p>Dubbo的远程调用过程仅仅是Dubbo框架中一个非常小的部分,Dubbo的整个调用流程还包括服务的注册、发现、路由、负载均衡、容错等功能,这些功能使得Dubbo能够灵活高效地处理各种复杂的分布式场景。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">2. 你在使用SpringBoot Start时,是否遇到过什么问题?如何解决?</strong></h4> <p><br></p> <p><strong>我</strong>: 主要是为了解决开发者调用接口时,需要在意其他参数,然后我在项目中写了一个Start,解决这个痛点,至于遇到过的难题,如何解决,我没有遇到过,请你详细说说有哪些问题,并如何解决呢?</p> <p><strong>GPT</strong>:在我之前的项目经历中,遇到的一些常见问题是:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>接口的参数传递不清晰,例如命名不统一或含义不明确。解决方法是通过规范化接口文档以及代码注释来明确参数的含义和命名约定。</li> <li data-list="ordered"><span class="ql-ui"></span>接口的返回值类型不统一。解决方法是定义一个统一的返回值格式,例如采用JSON格式,包括一个标记状态的code、返回信息的msg和返回数据的data字段。</li> <li data-list="ordered"><span class="ql-ui"></span>接口性能不稳定,导致请求耗时过长或请求失败。解决方法是进行接口性能测试,针对瓶颈进行优化,例如优化数据库查询语句、使用缓存等方式。</li> <li data-list="ordered"><span class="ql-ui"></span>接口安全性问题,例如接口参数传递过程中数据容易被窃取、篡改等。解决方法是采用数据加密方式(例如SSL/TLS)、限制接口调用权限等方式。</li> </ol> <p>以上是我在项目中遇到的一些问题以及解决方法,总体来说需要对接口进行规范化管理以及常规的性能和安全性优化。</p> <p><br></p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">3. 我们知道,Spring框架提供了多种AOP实现方式,比如JDK动态代理、CGLIB等。你能否简单介绍一下这些AOP实现方式的区别?</strong></h4> <p><br></p> <p><strong>我</strong>: JDK动态代理好像是需要有实现接口时,使用的是JDK动态代理,CGLIB则是没有实现接口时,使用的是CGLIB,请你具体说说,并且详细举例</p> <p><strong>GPT</strong>: 对的,JDK动态代理需要有接口,而CGLIB动态代理不需要接口。</p> <p>JDK动态代理是基于接口实现的,当我们需要代理一个类的方法时,需要先定义一个接口,只有实现该接口的类才能被代理。JDK动态代理通过反射机制在运行时动态地创建代理对象,这个代理对象实现了代理类所实现的接口,并且将所有方法的调用转发给了被代理对象。举个例子,假设我们有一个UserService接口和UserServiceImp实现类,现在我们需要代理UserService的一些方法:</p> <div class="ql-code-block-container"> <div class="ql-code-block"> public interface UserService { </div> <div class="ql-code-block"> &nbsp; void getUser(); </div> <div class="ql-code-block"> &nbsp; void addUser(); </div> <div class="ql-code-block"> } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> public class UserServiceImp implements UserService { </div> <div class="ql-code-block"> &nbsp; public void getUser(){ </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; System.out.println("get a user"); </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> &nbsp; public void addUser(){ </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; System.out.println("add a user"); </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> public class UserServiceProxy implements InvocationHandler { </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; private Object target; </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; public UserServiceProxy(Object target) { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; this.target = target; </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; Object result = method.invoke(target, args); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; return result; </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; public static void main(String[] args) { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; UserServiceImp userServiceImp = new UserServiceImp(); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; UserService userProxy = (UserService) Proxy.newProxyInstance(userServiceImp.getClass().getClassLoader(), userServiceImp.getClass().getInterfaces(), new UserServiceProxy(userServiceImp)); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; userProxy.getUser(); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; userProxy.addUser(); </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> } </div> </div> <p>在上面的示例中,我们定义了一个UserService接口和一个UserServiceImp实现类,实现了getUser()和addUser()方法。UserServiceProxy是我们自己定义的代理类,实现了InvocationHandler接口,用来在代理对象方法调用时进行处理。我们使用Proxy.newProxyInstance()方法来创建代理对象,参数分别为类加载器、接口数组和代理类实现的InvocationHandler。在main()方法中,我们创建一个UserServiceImp实例,使用代理来调用getUser()和addUser()方法。</p> <p>而CGLIB动态代理不需要接口,它是通过继承来实现的。CGLIB动态代理通过生成被代理类的子类来实现代理,被代理类不能被final修饰。举个例子,我们还是拿上面的UserServiceImp类来做示例:</p> <div class="ql-code-block-container"> <div class="ql-code-block"> public class UserServiceCglibProxy implements MethodInterceptor { </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; private Object target; </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; public UserServiceCglibProxy(Object target) { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; this.target = target; </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; Object result = method.invoke(target, objects); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; return result; </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> ​ </div> <div class="ql-code-block"> &nbsp; public static void main(String[] args) { </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; Enhancer enhancer = new Enhancer(); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; enhancer.setSuperclass(UserServiceImp.class); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; enhancer.setCallback(new UserServiceCglibProxy(new UserServiceImp())); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; UserServiceImp userServiceProxy = (UserServiceImp) enhancer.create(); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; userServiceProxy.getUser(); </div> <div class="ql-code-block"> &nbsp; &nbsp; &nbsp; userServiceProxy.addUser(); </div> <div class="ql-code-block"> &nbsp; } </div> <div class="ql-code-block"> } </div> </div> <p>在上面的示例中,我们定义了一个UserServiceCglibProxy代理类,实现了MethodInterceptor接口,在intercept()方法中实现对方法的代理。我们使用Enhancer来创建代理对象,先设置父类为UserServiceImp,再设置回调函数为UserServiceCglibProxy,最后创建代理对象。在main()方法中,我们创建UserServiceImp实例并将其代理,使用userServiceProxy调用getUser()和addUser()方法。</p> <p>从这两个示例可以看出,JDK动态代理是基于接口实现的,代理的是接口中的方法,而CGLIB动态代理是基于类实现的,代理的是这个类的所有方法,包括public、protected和private方法。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">4. 当一个接口调用发生异常时,你认为在平台中该怎样做处理才能增加用户体验?</strong></h4> <p><br></p> <p><strong>我</strong>: 在一个接口调用发生异常时,平台应该首先跳转到一个统一的异常处理解决,并可以提供给用户一些具体的实例代码,最后不行可以向开发者反映</p> <p><strong>GPT</strong>: 对于一个接口调用发生异常的情况,平台应该采取如下的异常处理解决方式:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>首先将该异常记录下来,供开发者参考并优化代码。</li> <li data-list="ordered"><span class="ql-ui"></span>然后跳转到一个统一的异常处理页面展示给用户,该页面应当具有友好的UI界面,包括异常信息、错误码以及建议解决方案等。</li> <li data-list="ordered"><span class="ql-ui"></span>在该页面中,可以提供给用户一些具体的实例代码,帮助其了解如何正确地调用接口,防止下次再次发生类似情况。</li> <li data-list="ordered"><span class="ql-ui"></span>如果用户无法通过提供的实例代码解决问题,可以提供用户提供反馈的通道,让其向开发者反映,开发者可以及时修复相关的问题。</li> </ol> <p>这样的处理方式可以增加用户的体验感和满意度,同时也能够帮助开发者更快地定位和修复问题,提高整个平台的稳定性和可靠性。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">5. 谈谈对于在Spring中使用注解的理解,比如@Controller、@Service、@Autowired等?</strong></h4> <p><br></p> <p><strong>我</strong>: 把SpirngBoot注解的优点说了出来,但是感觉不对...然后我就反问了GTP</p> <p><strong>GPT</strong>: 在Spring中,注解是一种常用的方式来描述和配置组件,包括控制器、服务、数据访问等组件。常用的注解包括:</p> <ol> <li data-list="bullet"><span class="ql-ui"></span>@Controller:表示一个控制器类。</li> <li data-list="bullet"><span class="ql-ui"></span>@Service:表示一个服务类。</li> <li data-list="bullet"><span class="ql-ui"></span>@Repository:表示一个数据访问对象类。</li> <li data-list="bullet"><span class="ql-ui"></span>@Autowired:表示自动装配一个组件到另一个组件中。</li> <li data-list="bullet"><span class="ql-ui"></span>@RequestMapping:表示一个请求映射,将请求映射到对应的处理方法上。</li> <li data-list="bullet"><span class="ql-ui"></span>@RequestParam:表示一个请求参数,将请求参数映射到方法的参数上。</li> </ol> <p>SpringBoot是基于Spring的,因此也大量使用注解来进行配置。</p> <p>区别:</p> <ol> <li data-list="bullet"><span class="ql-ui"></span>SpringBoot中的注解更加简化。比如可以使用@SpringBootApplication代替@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解。</li> <li data-list="bullet"><span class="ql-ui"></span>SpringBoot内置了很多starter,使用起来更加方便,可以快速搭建一个完整的应用程序。</li> <li data-list="bullet"><span class="ql-ui"></span>SpringBoot自动做了很多配置,比如自动配置DataSource、DispatcherServlet等,减少了繁琐的配置过程。</li> </ol> <p>优点:</p> <ol> <li data-list="bullet"><span class="ql-ui"></span>更加简洁、方便,编写效率更高。</li> <li data-list="bullet"><span class="ql-ui"></span>自动化配置降低了使用Spring的门槛,降低了对于框架的理解和配置能力的要求。</li> <li data-list="bullet"><span class="ql-ui"></span>基于注解的配置,使得组件之间的依赖关系更加清晰明了。</li> </ol> <p>缺点:</p> <ol> <li data-list="bullet"><span class="ql-ui"></span>如果注解使用不当,会导致代码可读性变差,影响后期的维护。</li> <li data-list="bullet"><span class="ql-ui"></span>深入掌握Spring注解和SpringBoot原理需要较高的学习成本。</li> <li data-list="bullet"><span class="ql-ui"></span>大量使用自动化配置可能迫使开发者一些小细节处理时显得力不从心。</li> </ol> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">6. 请对比一下Spring的IoC和AOP两个主要概念的区别。</strong></h4> <p><br></p> <p><strong>我</strong>: Spring的IOC是控制反转,将创建和控制对象的权利,交给了Spring容器来管理,AOP则是面向切面编程,将一些重复、通用的点从业务代码中抽离,区别在于:IOC是创建和控制,而AOP是抽离,如果回答不对,请你详细说明</p> <p><strong>GPT</strong>: 您的回答是正确的。下面进一步说明:</p> <ol> <li data-list="bullet"><span class="ql-ui"></span>IOC(Inversion of Control)是一种设计思想,把对象的创建、依赖注入、生命周期管理等工作交给IOC容器来完成,从而达到松耦合、易维护的目的。在Spring中,IOC容器可以是BeanFactory、ApplicationContext等实现类。</li> <li data-list="bullet"><span class="ql-ui"></span>AOP(Aspect Oriented Programming)是指面向切面编程,是一种编程思想,用于分离关注点和横切关注点。AOP可以实现日志、安全、事务等功能,让我们的业务逻辑更加清晰,可维护性更高。在Spring中,AOP可以通过注解方式编写切面,对目标类中的方法进行拦截。</li> </ol> <p>相比较而言,IOC和AOP是两个不同的概念,更精确地说,IOC是一种实现思想,而AOP是一种编程思想。通过IOC,我们能够将对象的创建和控制交由框架来完成;而使用AOP,我们可以将与业务逻辑无关的代码进行抽离,从而达到解耦、维护性高的目的。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">7. 在项目中,你是如何进行接口的鉴权和授权的?</strong></h4> <p><br></p> <p><strong>我</strong>: 在项目中,我使用了Gateway网关统一鉴于和授予,并且在数据库中设置了ak、sk两个字段,用于区分用户之间的权限。那么通常怎么进行接口的鉴权和授权呢?</p> <p><strong>GPT</strong>: 接口的鉴权和授权通常可以通过以下几个步骤完成:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>首先,前端应用会将用户的ak、sk等信息通过Gateway网关请求发送给后端。</li> <li data-list="ordered"><span class="ql-ui"></span>后端会通过网关拦截器对请求进行拦截,验证用户的身份和权限信息。其中,身份验证包括验证ak、sk的有效性等,权限验证包括判断用户是否有访问该接口的权限等。如果身份和权限验证通过,则将请求转发给后端服务。</li> <li data-list="ordered"><span class="ql-ui"></span>后端服务在接收到请求时,也需要对请求进行身份和权限验证。这里的身份验证可以复用网关的验证结果,权限验证可以根据具体的业务需求实现。如果身份和权限都验证通过,则进行相应的业务处理并返回结果。</li> <li data-list="ordered"><span class="ql-ui"></span>如果身份或权限验证不通过,则返回相应的错误信息,并拒绝请求。</li> </ol> <p>需要注意的是,接口鉴权和授权的具体实现方式可能因项目而异,需要根据实际情况进行设计和实现。同时,为了提高安全性,应该定期对ak、sk等敏感信息进行加密和重置等操作。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">8. 当一个接口的响应时间过长时,你认为该如何做优化?</strong></h4> <p><br></p> <p><strong>我</strong>:当一个接口响应时间过长时,我会如何优化,首先,先根据访问量确定该接口访问人数频率,如果是很少的话,我不打算进行优化,如果是访问人数多的话,我会确定具体是什么原因导致响应时间过长,然后根据问题优化、并且我会考虑使用多线程,你觉得我的回答对吗,不对请你详细说明</p> <p><strong>GPT</strong>: 您的解答是基本正确的。但我想深入探讨一下您提到的问题优化和使用多线程的内容。</p> <p>问题优化可以包括以下几个方面:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>数据库优化:检查是否有查询语句优化的余地,是否可以利用索引来提高查询效率等。</li> <li data-list="ordered"><span class="ql-ui"></span>网络优化:通过网络流量分析和监控,优化网络效率和带宽。</li> <li data-list="ordered"><span class="ql-ui"></span>前端和后端代码优化:检查代码的性能瓶颈和影响响应时间的部分,如能够避免不必要的代码执行、减少内存使用、使用缓存等。</li> </ol> <p>而关于多线程的使用需要考虑以下几个方面:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>确定哪些业务场景需要使用多线程:如果业务场景的处理时长比较长,可以考虑使用多线程来提高效率。</li> <li data-list="ordered"><span class="ql-ui"></span>使用多线程的方式:线程池、Fork/Join框架等。</li> <li data-list="ordered"><span class="ql-ui"></span>注意线程安全:尽量避免线程间的数据交叉和竞争,并使用同步措施来保证多线程环境下数据的正确性。</li> <li data-list="ordered"><span class="ql-ui"></span>监控和调优:使用多线程后,我们需要对线程池进行监控,及时诊断线程池状况并调整线程池参数。</li> </ol> <p>希望我的回答对您有所帮助。(很有帮助!)</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">9. 请简要说明一下Spring的事务管理机制。</strong></h4> <p><br></p> <p><strong>我</strong>: Spring的事务管理机制有两大类:1.编程式事务,将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,2.声明式事务,将事务管理代码从业务方法中分离出来, 以声明的方式来实现事务管理。请你在补充说明一些</p> <p><strong>GPT</strong>: 除了编程式和声明式事务,Spring还支持注解式事务管理。注解式事务是在业务方法上通过注解来实现事务管理,使得业务方法的实现与事务管理的细节进行了解耦。常用的注解有@Transactional,可以声明该方法需要启用事务管理,同时可以设置事务的隔离级别、传播特性等属性。此外,Spring还提供了TransactionTemplate类,可以简化编程式事务的代码。通过使用TransactionTemplate,可以不用手动执行事务的提交和回滚,而是可以将事务操作包装在一个回调函数中,在回调函数执行完毕后,TransactionTemplate会自动提交或回滚事务。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">10. 当出现高并发请求时,你认为应该如何优化系统性能?</strong></h4> <p><br></p> <p><strong>我</strong>: 首先判断高并发请求的原因是什么,会考虑扩大缓存池里的线程数,还会考虑对请求进行限制或者引入消息队列,我不是很了解这些,请你在细细说明吧</p> <p><strong>GPT</strong>: 高并发请求的原因可能是因为业务逻辑诉求,也可能是由于系统性能瓶颈导致的。当出现高并发请求时,可以通过以下方式来处理:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>扩大线程池的大小:通过增加线程池中线程的数量来处理更多的请求,这样可以提高并发处理能力。但是在线程池的配置上要关注线程池的大小,防止因为过多线程导致资源的浪费和系统性能损耗。</li> <li data-list="ordered"><span class="ql-ui"></span>提高缓存性能:缓存可以减少请求的处理时间和数据库的压力,当出现高并发请求时,可以考虑提高缓存的性能。</li> <li data-list="ordered"><span class="ql-ui"></span>引入消息队列:将请求放入消息队列,异步处理请求可以避免多个请求同时进入服务器造成的阻塞。</li> <li data-list="ordered"><span class="ql-ui"></span>系统限流:为了避免系统崩溃,服务器可以对请求做出限制。可以通过系统参数配置和QoS限流等机制限制请求的数量。</li> </ol> <p>需要注意的是,在调整系统的配置时,要结合实际情况进行分析。对于不同的场景和业务需求,需要采取不同的解决方式。同时还需要进行系统性能的监控和分析,及时检测系统性能的瓶颈。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">11. 什么是分布式系统?为什么需要分布式系统?举个例子说明。</strong></h4> <p><br></p> <p><strong>我</strong>: 分布式系统,简单来说就是有多个运行程序,每个程序有独立负责的功能,这样即使一个挂掉,其他程序部分也不影响,降低耦合性。例如前端调用A,而A是依赖B的,这样B挂掉 A也挂掉,就会导致前端错误,但是A是独立的,则B挂掉对A没有影响,如果不对,请你说明</p> <p><strong>GPT</strong>: 您的描述基本上是正确的。然而,分布式系统与单体应用最大的不同是,前端调用 A 时不是直接调用它的内部方法,而是通过网络请求。A 可能需要等待 B 的响应才能完成其任务。在分布式系统中,需要考虑网络通信的延迟和故障,这可能会导致 A 等待 B 的响应时间过长或者没有响应。因此,需要对分布式系统进行适当的架构设计和各种手段的应对,如负载均衡、容错机制、数据一致性等等。</p> <p>这里不太明白,然后又问了GPT:那么为什么需要分布式系统,请你举个例子说明一下分布式系统之所以存在,是因为单个计算机的处理能力和存储能力受限,无法满足日益增长的数据和请求的需求,而分布式系统则通过将计算机资源和处理能力分布在多台计算机上,从而扩展了整个系统的能力和性能。举个例子来说,假设有一个电商网站,每天都有成千上万的用户访问和下单,单个服务器难以承受如此大的并发负载。此时,将整个系统拆分为多个服务,每个服务运行在不同的服务器上,分别处理不同的请求,再通过负载均衡器分发请求,就可以实现分布式系统,从而提高系统的性能和可靠性。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">12. 你了解过什么分布式框架?请简要介绍一下。</strong></h4> <p><br></p> <p><strong>我</strong>: 我了解的分布式框架有SpringCloud...</p> <p><strong>GPT</strong>: 是的,SpringCloud是一个非常流行的开源分布式框架。它基于SpringBoot构建,并提供了一系列开箱即用的组件,如服务注册与发现、负载均衡、断路器、网关等等,极大地简化了微服务架构下的开发和运维工作。除了SpringCloud,还有像Dubbo、Zookeeper、Kubernetes等分布式框架和工具也很常见。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">13. 在MySQL中,你是否了解过索引的使用?如果是,你觉得在哪些情况下应该使用索引?</strong></h4> <p><br></p> <p><strong>我</strong>: 了解索引的作用,用于提高查询文件的速度,在需要大量查询数据,且对数据的修改较少时,适用于使用索引。</p> <p><strong>GPT</strong>: 不错,索引是用于加快查询数据速度的一种数据结构,它可以为表中的一列或多列创建索引,使得数据的查找更快。一般来说,索引适用于需要频繁查询且对数据增删改的操作较少的表。同时,索引也会占用一定的磁盘空间并影响写入数据的速度,因此在使用时需要权衡利弊。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">14. 如何保证接口的安全性?</strong></h4> <p><br></p> <p><strong>我</strong>: 1.架构上使用了Gateway用于统一的鉴权2.提供专门的单向加密算法二次比对校验</p> <p><strong>GPT</strong>: 除了架构上使用Gateway用于统一的鉴权,提供专门的单向加密算法二次比对校验等措施之外,还可以采取以下措施来保证接口的安全性:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>认证:使用身份认证措施来验证用户的身份,如使用用户名和密码、数字证书、双因素认证等。</li> <li data-list="ordered"><span class="ql-ui"></span>授权:使用授权措施来控制用户能够访问的资源和操作,如使用访问令牌、访问控制列表、角色和权限等。</li> <li data-list="ordered"><span class="ql-ui"></span>加密:对于敏感数据,应该使用加密措施来保护其机密性,如使用对称加密和非对称加密等技术。</li> <li data-list="ordered"><span class="ql-ui"></span>防御:对于常见攻击,如跨站脚本攻击、SQL注入、DDoS攻击等,需要采取相应的防御措施,如使用验证码、过滤非法字符、限制访问频率等。</li> <li data-list="ordered"><span class="ql-ui"></span>监控:通过监控接口访问情况和异常情况来及时发现和应对安全威胁,如使用日志分析、异常监控等技术。</li> </ol> <p>综上所述,保证接口的安全性需要多种措施的综合应用,从不同的层面和角度来确保接口的安全性。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">15. 在开发过程中,遇到过哪些问题,并是如何解决?</strong></h4> <p><br></p> <p><strong>我</strong>: 在开发过程中,在SpringBoot中导入Dubbo使用Zookeeper时,与原SpringBoot版本有冲突,导致Zookeeper启动不了。后来将Zookper换成Nacos解决问题<strong>GPT</strong>: 这可能是由于Dubbo和Zookeeper依赖包版本与SpringBoot版本不匹配所导致的冲突。在使用Dubbo的时候建议使用与Dubbo官网推荐版本相匹配的Zookeeper版本。另一方面,您可以考虑使用Nacos替代Zookeeper,因为Nacos可以与Dubbo集成并且可以更好地支持SpringCloud和SpringBoot。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">16. 你是否了解过SpringBoot的优化方法?请简单说说你理解的优化方法。</strong></h4> <p><br></p> <p><strong>我</strong>: ???(懵逼脸,还是看GPT的吧-_-)</p> <p><strong>GPT</strong>: SpringBoot的优化方法包括以下几个方面:</p> <ol> <li data-list="ordered"><span class="ql-ui"></span>配置文件的优化:尽量避免使用xml配置文件,并且对于一些配置项可以使用properties或者yaml文件替代。同时对于静态资源可以使用CDN加速。</li> <li data-list="ordered"><span class="ql-ui"></span>内存优化:调整JVM参数,但不是随便调整。可以使用SpringBoot自带的性能分析工具来监控应用中的内存占用、GC等信息。</li> <li data-list="ordered"><span class="ql-ui"></span>数据库优化:需要进行优化查询语句和创建索引,减少不必要的数据库操作和连接,避免请求量查过大,不要一次性获取全部数据。</li> <li data-list="ordered"><span class="ql-ui"></span>编码优化:避免频繁的对象创建和销毁,优化循环代码,减少访问静态变量和方法,减少使用try-catch语句块等。</li> <li data-list="ordered"><span class="ql-ui"></span>缓存优化:使用缓存技术,如Redis等,可以提高系统的吞吐能力和性能,减轻服务器压力。</li> </ol> <p>我个人的理解是,SpringBoot的优化是一种系统性能优化,需要通过多个方面的优化手段来提高应用程序的性能,使用合适的工具来监控应用程序的运行状态和进行性能调优是非常重要的。同时,我们需要深入了解各种优化手段的实现原理,做出合适的决策。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">17. 我们知道,Java虚拟机提供了运行时数据区,比如Java堆、Java栈等。你能否简单介绍一下它们的作用和区别?</strong></h4> <p><br></p> <p><strong>我</strong>: 栈是固定大小的,而堆可以根据开发者设定(回答的时候就感觉不靠谱,后gpt果然给我一巴掌)<strong>GPT</strong>: 这个说法不完全正确。在Java中,栈和堆都具有一定的固定大小限制,但是它们的大小限制的来源不同。栈空间的大小是由JVM在运行时决定的,通常情况下,每个线程都会有一个独立的栈空间,其大小由JVM在创建线程时根据预设的参数设定。而堆空间的大小可以在启动JVM时通过命令行参数来设定,也可以在程序运行时动态调整。在Java中,栈用于存储方法的局部变量、方法的调用和返回信息,而堆用于存储由new操作符创建的对象。</p> <p>这里又回顾一下栈和堆Java堆和Java栈都是Java虚拟机(JVM)运行时的内存区域。Java堆是JVM中用于存储对象实例的内存区域,是Java程序中最常用的内存区域。Java堆是由Java虚拟机自动管理的,内存空间的分配和释放都是由JVM自动完成的。由于Java堆中存储的是对象实例,因此Java堆的大小可以通过-Xmx参数来设置。Java栈是Java程序执行方法调用的内存区域。每个线程在运行时都会创建一个Java栈。Java栈用来存储方法执行的栈帧,栈帧里包含了用于当前方法执行的局部变量、操作数栈、方法返回值等信息。Java栈的大小是在线程创建时就被固定的。Java堆和Java栈的主要区别在于,Java堆是用于存放对象实例的内存区域,而Java栈是用于存放方法调用的内存区域。另外,Java堆中的对象实例可以被多个线程共享,而Java栈是每个线程独享的。</p> <p>总之,了解Java堆和Java栈的区别和作用可以帮助开发人员更好地理解Java程序的内存模型,并且帮助开发人员更好地编写高效稳定的Java程序。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">18. 请谈谈你对于单元测试的见解。</strong></h4> <p><br></p> <p><strong>我</strong>: 单元测试是很重要的,如果不测试就直接编写别的代码块,后面出现异常时不利于定位错误</p> <p><strong>GPT</strong>: 没错,单元测试对于保证软件质量至关重要。通过编写单元测试,可以不断检测和验证代码的正确性、稳定性和可维护性,避免了在开发阶段积累大量的隐患和漏洞。此外,单元测试还可以帮助开发人员及时发现并修复代码中的错误,减少了后期的调试和Bug修复工作量,大大提高了开发效率和代码质量。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">19. 你是如何进行接口文档的编写和管理的?</strong></h4> <p><br></p> <p><strong>我</strong>: 使用了Knife4j加Swagger进行接口文档的编写和管理<strong>GPT</strong>: 很棒的选择!Knife4j 是一款优秀的 SpringBoot 接口文档框架,其整合了 Swagger-UI 和 Swagger-Bootstrap-UI 两个 UI 框架,为接口文档的编写和查询提供了非常友好的界面。同时,Knife4j 还支持多种数据格式的对接,对于接口文档的管理和维护都非常便捷。</p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">20. 最后一个问题,你认为在你实现的平台中还可以进行哪些方面的改进?</strong></h4> <p><br></p> <p><strong>我</strong>: 1.我没有提供给用户可以更换ak、sk的方法 。2没有考虑到增加限流、降低保护等</p> <p><strong>GPT</strong>: 对于问题1,正确的做法应该是提供可以更换AK、SK的接口,让用户可以使用新的AK、SK来进行访问授权。通常情况下,建议在开发API时,提供相应的文档说明,让用户了解如何使用AK、SK进行授权,并且应该提供一个作为备用的AK、SK,以避免一旦主要的AK、SK泄露,导致API无法正常使用的问题。 对于问题2,增加限流、降低保护等,是保证API服务可用性和可靠性的关键措施。在API开发和维护过程中,应该根据实际业务需求进行有效的限流和保护,确保API资源的稳定性和可靠性。常用的限流机制有:令牌桶、漏桶;常用的保护机制有:熔断、降级。同时,需要根据实际情况定期检查API服务的运行情况,及时发现并解决潜在的问题,以保证API服务的稳定性和可靠性。</p> <p><br></p> <p>好啦~以上就是全部的内容啦捏</p> <p><br></p> <p><br></p> </div> </body> </html>

【问答】感觉实习对自己成长有限,是否要辞职回校自学?

鱼哥您好,我现在实习了一周多,目前负责的是OA系统的开发,基本都是crud,感觉写这些对自身的成长没有什么帮助,写这些系统最大的感觉就是都是在写业务,理解了业务自然就能写出来了,没什么技术含金量,感觉我自学都比在那写crud成长来得快 目前的两个月的学习进度: 啃了一遍Spring源码,再次深入学了一遍设计模式并应用到我自己的项目中了,JUC两周内可以学完,我现在的想法是学完JUC再把鱼总最新的两个项目学完并替换我自己的lowB项目然后再去继续投简历,不知道时间是否来得及,也不知道是否应该再学完jvm再去投? 问题: 1.我是否需要应该辞职回校自学?如果回校自学我担心缺少一段实习经历对我秋招求职会有很大影响 2.现在也是银四阶段,我是否应该继续投递简历选择一家更好的公司? 3.我想知道一个公司的实习生(Java后端方向)应该负责什么业务会对其自身成长有较大的帮助 4.我询问其他实习的同学,他们都说实习阶段公司都是把你当新人,基本不会给有难度的活给你干的,到时简历书写实习经历时,把自己个人的有含金量的项目搬到实习经历那里即可,这种做法是否可取呢?

【自我介绍】明确目标,决定考研

<html> <head></head> <body> <div class="content ql-editor"> <p>#自我介绍#</p> <p>大家好,我是君寻,来到星球已经有小半年的时间了,今天发一篇迟来的自我介绍~</p> <p><br></p> <p>我来自河南郑州,是一所三本大学的大三学生。大一的时候对C/C++学习比较多,参加蓝桥杯水到一个省三,其他的,像Java、Python、前端、数据库、四大件,都是浅尝辄止,学得不是特别的深入。兴趣爱好有口琴、象棋、阅读、写作等,下面,我将从个三个方面介绍自己。</p> <p><br></p> <p><strong><em>首先,是我的个人学习经历。</em></strong></p> <p><em>1、大学前的暑假。</em></p> <p>我买过一本《C语言程序设计》的黑皮书,那时候还没有个人电脑,结果读第一章时就被劝退了,然后迷茫之中,在知乎看了些经验帖,太难的我当时没看懂,就记住了一条大一时把高数、线代、概率论都学好(现在想来可能AI相关的吧),因为从小就对数学很擅长,所以后来也确实做到了这一条。</p> <p><br></p> <p><em>2、大一和大二期间。</em></p> <p>大一加入了ACM协会和数学协会,参加过校内ACM协会举办的一些小比赛。大二参加蓝桥杯拿了一个省三,参加全国大学生数学竞赛和数学建模竞赛都拿到了省一,英语四级还不知道过没过(第一次考了424,第二次是三月刚考的,还没出成绩,不过感觉比上次写的好)。其他技术方面我学的比较浅且杂,大一学了C和一些C++,大二学了python、数据库、四大件、游戏引擎(Cocos 2dx和Cocos Studio),顺带了解了js和ts,但很多现在都忘差不多了(哭)。从大二开始,我就一直有用Typora记笔记,不过没发过博客,以后会尝试在CSDN、Github、星球上发表,大家有好的建议可以多跟我说说~</p> <p><br></p> <p><em>3、大三到现在。</em></p> <p>大三开设了Java和前端课程,我对它们做过简单的学习(Java基础和前端三件套、Vue框架),也了解过相关技术栈和就业行情。下学期开学后,第一周在和队友准备挑战杯材料,第二周和第四周在准备数学竞赛,第三周在准备英语四级,第五周忙社团活动(以后就交给学弟学妹们啦)和挑战杯校决赛汇演,之后才松了一口气。另外,也准备过两次软考,但都因为疫情取消了,这次继续报了五月的软件设计师,继续努力,这回一次过!</p> <p><br></p> <p><strong><em>然后,是我加入星球的原因。</em></strong></p> <p>大三上学期国庆节之后,由于疫情封控,我一直在寝室没出去过,也因此开始考虑未来的事情。我花了一个星期在知乎、贴吧、b站、招聘软件等地方搜集行业信息,前端和Java都是异常的卷,C++的hc也很少,而且每个方向跨度很大,我陷入了深深的焦虑,不知道未来的路该何去何从,我不怕吃苦,我怕辛辛苦苦学到的东西到头来没有市场。带着这种焦虑,我加入了咱们星球,在看了很多星球资源库的东西后,结合自身和实际情况,也有考虑疫情和环境,决定了选择考研,</p> <p>原因有四点:<strong>第一</strong>,自己数学基础不差,英语也有信心,不虚考研的公共课;<strong>第二</strong>,研究生学历可以提高未来自己过简历的门槛;<strong>第三</strong>,大学的前两年学得特别乱,没有专精的,也没什么实习经历,想多给自己几年学习技术的时间;<strong>最后一点</strong>,不确定疫情形势会怎么变化,万一以后一出去就被隔离没办法挣米就不妙了,那还不如多留几年时间静观其变,也能带给自己更多提升。</p> <p><br></p> <p><strong><em>接着,是我的个人目标和预期收获。</em></strong></p> <p>首要目标就是考研上岸,最好是两广、江浙、川渝这样的地带,我奢求不大,确定的目标院校大多是双非,考22408,以后根据自己复习情况再动态调整。届时如果上岸的话,我会再做一次自我介绍,分享一些新的目标和心得体会,跟大家一起探讨未来和人生。其次,就是闲暇之余要在调节好自己身心的同时,对C++进一步学习,毕竟也是我最开始决定要走的路呀,第一步安排是:</p> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span>C程序设计语言黑书,还有以前听郝斌课程整理的笔记;</li> <li data-list="ordered"><span class="ql-ui"></span>菜鸟教程的C++</li> <li data-list="ordered"><span class="ql-ui"></span>数据结构(C++描述),有不懂的去翻primer</li> </ol> <p><br></p> <p>相比于通过视频学习,我更喜欢书本的形式吧(实体书、电子书都可以),有卡壳或者不懂的我会查看其他相关参考书、搜索技术论坛,亦或是找对应视频学习。当然啦,我也有全程通过视频学习的技术,其实我觉得不管学习方式如何,最重要的还是自己要多想多练多做总结吧!另外,我有个疑问想问一下大家,网上有很多人这样描述:比如按照学习路线都学完了还是找不到工作、有几年工作经验跳槽后找不到工作。他们给我的感觉就是明明学的很好确找不到工作,是单纯因为行业卷hc少,还是我把他们都假想的太强了(笑)</p> <p><br></p> <p>最后,也预祝大家都能通过自己的努力,实现一个又一个的目标。以前我是一个追求完美主义的人,在很多事情上浪费了大量的时间,由此我逐渐发现,只有承认自己的不完美,才能真正放开手脚去努力,真正的完美主义,在于去追求的那个过程,残缺美的真谛也正是如此。往后,做一个一直很努力的普通人,不要放弃赢的可能性,朝前走就是啦!</p> <p><br></p> </div> </body> </html>

#学习总结# 阶段性总结 一.前言 拖了很久很久的总结,现在大学生活也逐渐找到了节奏,才开始着手记录,希望以后可以保持总结反思。看到星球里的小伙伴们好像一直都很努力,自己也确实有被激励到,希望自己也可以向大家一样一直努力,保持进步。 二.进度 大一上:主要学习C语言,学过一点点easyX,学了一点html 寒假:h5 c3(基础部分,做过一些简单的项目)+js(基础语法部分,还没有进入DOM和BOM) 大一下:Java和数据结构与算法学习中 三.存在问题: 1.学习进度太慢 2.想法太多,行动力缺不足 3.每天的有效学习时间过短 四.分析 解决方案: 1.分析: (1).处理编译环境的时间比较久,比如写h5 c3的时候,出现了更新数据之后页面却没有变化,一开始以为问题出现在css的数据更新上,后面发现连同html的数据也更新不了,一般都是第二天才能把页面更新出来(也是因为一直没有找到解决方法,每次都写一小会儿就写不下去,严重浪费了时间和精力);刚开始学习java的时候配置环境也浪费了半个月(但我觉得问题不在于环境,可能是编译器),我前后使用了三个编译器,分别是eclipse(没有运行的按键?!)、sublime(一开始是无法进行输入,后面是报错"找不到主类")、IDEA,前两个至今未可用。 (2).没有对已学知识进行总结和多做题目(理解底层逻辑),一开始觉得电子总结费时有一点多,后面在学习h5 c3的时候开始用语雀来写mindmap,是真的舒服。暂时来说,总结 练习(理解底层逻辑)yyds!后面可能也会公开我的学习笔记(虽然写得很烂) 2.分析: (1).刚开学的时候觉得参加学校游泳队(周一到周五都要训练)很浪费时间,用了接近一个星期去纠结要不要退出,甚至在那一天周五都和教练提出了退队申请,周末再仔细想想,我如果不去训练,我会去做些什么,答案其实已经出来了,很大机会我都会浪费掉那段训练的时间,所以后面又向教练提出不退队了,现在我不会再为这个问题而纠结,我会努力去享受这段时间,去在不一样的领域进步; (2).关于我的前端学习之旅,不得不承认,我已经接近有五周的时间没有碰过它了,可能在本周末重新开始一点点回忆起来(把品优购剩余的一点点写完)再去推进整体的前端学习; (3).关于英语四级考试的准备,一直在说要准备,但一直都没有行动起来,主要是要把零碎时间利用起来,而不是有空就玩(比如把吃饭看剧改成看TED,每天坚持背20个单词等等) 3.分析(目标:把有效学习时间提起来): (1).作息的进一步调整,目标 12:00-7:30 午休控制在40分钟左右 (2).重视每日To Do(不要假大空,实际一点点),DDL到手,看看能不能尽快解决,而不是拖到最后一刻匆匆忙忙搞定(统一软件:Microsoft To Do,别再这里写写,那里写写了) (3).课堂效率利用起来(包含水课--带电脑/逃掉(朋友刚刚过了一招逃课小技巧)) 五.本学期目标: 1.Java路线到阶段2 2.数据结构与算法(郝斌老师(主) 王卓老师(辅) letcode(可能要学多一点再开始每天1~2题) 3.前端路线到阶段2 4.过四级 5.不挂科

上半年前端规划

<html> <head></head> <body> <div class="content ql-editor"> <p><br></p> <p><span style="color: rgb(47, 48, 52);">#2023上半年目标#</span></p> <p><br></p> <blockquote> <div class="blockquote-item"> 虽说加入星球大半年了, 但是却一直没有把这个学习圈子利用起来, 直到 2 月初才开始认真规划自己的未来, 也在那时开始利用星球的资源进行学习 . 也是前端系统学习的开始-- </div> </blockquote> <p><br></p> <h3>2月 ~ 3月初</h3> <p><br></p> <p><span style="color: rgb(47, 48, 52);">这一个多月里更多的是复习三件套 , 明确未来的方向, 制定学习的计划. </span></p> <ol> <li data-list="bullet"><span class="ql-ui"></span><span style="color: rgb(47, 48, 52);">通过文档复习三件套, 并重新记录整理笔记, 开始建立自己的知识库, 将知识化为己用.</span></li> <li data-list="bullet"><span class="ql-ui"></span>跟着黑马的教程初步学习了ajax git node.js 但是知识记得不太牢固. 需要后续复习</li> <li data-list="bullet"><span class="ql-ui"></span><span style="color: rgb(47, 48, 52);">在acwing上学习算法, 每天学习一两个算法并刷题巩固. </span></li> </ol> <p><br></p> <blockquote> <div class="blockquote-item"> 今天六级得裸考🤣. 后续得规划下英语学习了 </div> </blockquote> <p><br></p> <p><br></p> <p><br></p> <h2><span style="color: rgb(47, 48, 52);">上半年规划</span></h2> <p><br></p> <blockquote> <div class="blockquote-item"> 仅进行月度规划 , 具体周~日规划将根据自身学习生活具体情况进行改动, 但是大方向坚定不移-- </div> </blockquote> <p><br></p> <h3><span style="color: rgb(47, 48, 52);">3月后续</span></h3> <p><br></p> <blockquote> <div class="blockquote-item"> 由于报了蓝桥杯, 3 月份主要是以 '' 学习算法 -- 刷题 -- 背算法模板 " 为主 , 技术的学习作为日常学习, 不做重点 </div> </blockquote> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>🏫 这学期开设了数据库和计算机组成原理, 上课时可跟着学--. 课后可看慕课上华中科大的 计组 , 哈工大的 数据库系统 , 进行总结提炼和巩固复习</li> <li data-list="bullet"><span class="ql-ui"></span>📄 学习完 前端体系课js高级 部分 . (时间安排较为合理, 但是需要保证每天的持续学习, 可以跟着课程标注的进度来学习 )</li> <li data-list="bullet"><span class="ql-ui"></span>🔥acwing 算法学习 (由于时间比较紧, 准备先将蓝桥杯辅导课过完再系统学数论和dp)</li> <li data-list="bullet" class="ql-indent-1"><span class="ql-ui"></span> 图论复习完 (3天时间)</li> <li data-list="bullet" class="ql-indent-1"><span class="ql-ui"></span>贪心初步学习 , 跟着教程过一遍即可 , 记忆模板 ( 预计 3 天 )</li> <li data-list="bullet" class="ql-indent-1"><span class="ql-ui"></span>蓝桥杯辅导课 , 视频 + 刷题 + 背模板 (预计 15 天, 可根据重难点适当进行时间上的调整)</li> <li data-list="bullet"><span class="ql-ui"></span>📚 阅读东野圭吾的《 恶意 》</li> <li data-list="bullet"><span class="ql-ui"></span>🏃 每天跑步 3 公里常态化 (除下雨)</li> </ol> <p><br></p> <p><br></p> <h3>4月</h3> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>🔥 📄acwing 算法学习 . 全力备战蓝桥杯!!</li> <li data-list="bullet" class="ql-indent-1"><span class="ql-ui"></span>刷 3 套真题 + 看 y 总视频题解 , 顺序不能颠倒, 一定要先独立刷题!!! ( 1 天 1 套, 预计 3 天)</li> <li data-list="bullet" class="ql-indent-1"><span class="ql-ui"></span>根据自身情况巩固知识 or 继续算法基础 + 背模板 + 复习真题 (直到 4 月 8 日, 最好留 3+ 天)</li> </ol> <p><br></p> <blockquote> <div class="blockquote-item"> 4 月 8 日 前全力备战蓝桥杯, 技术上可以复习之前的知识, 看一些技术文档 </div> </blockquote> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>🔥 前端体系课 复习node/git/webpack 部分 , 总结笔记 (预计 10 天)</li> <li data-list="bullet"><span class="ql-ui"></span>🔥 前端体系课 vue3 部分持续学习 (持续到月末)</li> <li data-list="bullet"><span class="ql-ui"></span>🏫 跟着 慕课 和 学校课程 学习数据库和计组</li> <li data-list="bullet"><span class="ql-ui"></span>📖 养成持续学习英语的习惯, 每天背 20 个单词 既是为了备战六月份的六级, 对计算机职业也是利好--</li> <li data-list="bullet"><span class="ql-ui"></span>📚 阅读路遥的《 人生 》</li> <li data-list="bullet"><span class="ql-ui"></span>🏃 每天跑步 3 公里常态化 (除下雨)</li> </ol> <p><br></p> <p><br></p> <h3>5月</h3> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>📖 持续记忆单词</li> <li data-list="bullet"><span class="ql-ui"></span>🏫 跟着 慕课 和 学校 学习专业课</li> <li data-list="bullet"><span class="ql-ui"></span>🔥 前端体系课 vue3 部分学完 , 整理笔记 ( 预计10天 )</li> <li data-list="bullet"><span class="ql-ui"></span>🔥 前端体系课 React 部分学完 , 整理笔记 (预计20天)</li> <li data-list="bullet"><span class="ql-ui"></span>💻 了解并实施个人博客的搭建</li> <li data-list="bullet"><span class="ql-ui"></span>📚 阅读余华的《在细雨中呼喊》</li> <li data-list="bullet"><span class="ql-ui"></span>🏃 每天跑步 3 公里常态化 (除下雨)</li> </ol> <p><br></p> <p><br></p> <h3>6月</h3> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>📖 过一遍六级词汇, 刷六级真题 , 备战六级 (具体时间不知--)</li> <li data-list="bullet"><span class="ql-ui"></span>🔥 学习鱼皮项目--- , 完善自身简历----- , 利用好鱼友们的项目笔记--</li> <li data-list="bullet"><span class="ql-ui"></span>🏫 全面复习学校专业课程, 期末保持 3.0 以上绩点</li> <li data-list="bullet"><span class="ql-ui"></span>学习 coderwhy js数据结构与算法 (b站), 少量leetcode刷题 , 养成刷题习惯</li> <li data-list="bullet"><span class="ql-ui"></span>📚 阅读 岸见一郎 古贺史健 的 《被讨厌的勇气》</li> <li data-list="bullet"><span class="ql-ui"></span>🏃 每天跑步 3 公里常态化 (除下雨)</li> </ol> <p><br></p> <p><br></p> <p><br></p> <h2>尾语</h2> <p><br></p> <blockquote> <div class="blockquote-item"> 送给大家一句话 : </div> </blockquote> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>自律和不自律, 都会吃苦, 不同的是, 自律的苦会让人生越来越甜 ~</li> </ol> <p><br></p> <p><br></p> <p><br></p> <p><br></p> </div> </body> </html>

2023上半年目标

<html> <head></head> <body> <div class="content ql-editor"> <p><span style="background-color: rgb(255, 255, 255); font-size: 15px; color: rgb(47, 48, 52);">#2023上半年目标#</span></p> <h2><strong style="color: rgb(51, 51, 51);"><br></strong></h2> <h2><strong style="color: rgb(51, 51, 51);">2023年上半年学习规划</strong></h2> <h3><strong style="color: rgb(51, 51, 51);">1.已学技术栈和获奖情况</strong></h3> <p><br></p> <p>目前大二下学期,我是从大一下学期开始学习Java,上半学期学了C语言,然后去C语言网刷了大概200-300题,然后大一上绩点4.0+。大一下学Java,然后看韩老师的JavaSE900集,花了1个半月的时间。然后开始陆续攻克SSM框架,SpringBoot框架等等。</p> <p><strong>技术栈:</strong></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>前端: Vue2和Vue3+TS,组件库ElementUi,Ant Design Pro,React也学习过,大多数都忘了,因为没做过完整项目。</li> <li data-list="bullet"><span class="ql-ui"></span>后端:SSM,SpringBoot,MP,SpringCloud</li> <li data-list="bullet"><span class="ql-ui"></span>消息队列: RabbitMq</li> <li data-list="bullet"><span class="ql-ui"></span>搜索引擎:ES</li> <li data-list="bullet"><span class="ql-ui"></span>部署: Docker 和 宝塔 (Vercel其次)</li> <li data-list="bullet"><span class="ql-ui"></span>缓存: Redis</li> <li data-list="bullet"><span class="ql-ui"></span>数据库:MySQL</li> <li data-list="bullet"><span class="ql-ui"></span>分布式版本控制: Git</li> <li data-list="bullet"><span class="ql-ui"></span>后端包管理: Maven</li> <li data-list="bullet"><span class="ql-ui"></span>前端包管理: Npm,Yarn</li> </ol> <p><strong>获奖情况:</strong></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>没参加过挑战者杯,互联网+,感觉是PPT大赛,而且没人带,我喜欢做技术,做PPT和Word当主负责人感觉会很累。</li> <li data-list="bullet"><span class="ql-ui"></span>四六级考过 计算机二级(随便考的)</li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">2.学习计划</strong></h3> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>备考软件中级(听说不难,刷题就完事)</li> <li data-list="bullet"><span class="ql-ui"></span>每日一道力扣+复习做过的题目</li> <li data-list="bullet"><span class="ql-ui"></span>操作系统和计算机网络 每天花1小时看下,增加下知识的广度。</li> <li data-list="bullet"><span class="ql-ui"></span>将鱼皮的API接口项目和聚合搜索项目做完,因为我自己已经制定好了简历,然后按简历写的去复习八股文之类的,到时候结合鱼皮的牛皮项目直接起飞~</li> <li data-list="bullet"><span class="ql-ui"></span>空闲时间每天跑两圈,然后拉下引体向上(10+)</li> <li data-list="bullet"><span class="ql-ui"></span>将重心从绩点转移到技术栈上,大一是校二等奖,说实话奖学金也就图一乐,这含金量=.....,绩点我现在稳定3.7-3.8差不多,4.0+太耗费时间了,不如转到技术栈的提升,或者去参与其他比赛。</li> <li data-list="bullet"><span class="ql-ui"></span>每天准备八股文复习20题,准备暑假实习</li> <li data-list="bullet"><span class="ql-ui"></span>在个人博客上继续更新笔记</li> <li data-list="bullet"><span class="ql-ui"></span>帮助星球小伙伴解答问题</li> <li data-list="bullet"><span class="ql-ui"></span>看Java并发编程的艺术这本书籍</li> <li data-list="bullet"><span class="ql-ui"></span>星球已续费,继续在星球打卡,并且记录每天收获</li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">3.项目和个人博客</strong></h3> <p><br></p> <p><strong>项目:</strong></p> <p>一月份到2月份完成了个人设计的图书管理系统,从数据库表设计,然后前端页面,后端接口,部署服务器,申请SSL证书,搭建图床,由于鱼皮图床挂了,我把项目的图片和个人博客的图片,放在我自己的图床上了,然后设置了防盗链和CDN缓存。</p> <p><strong style="color: rgb(65, 131, 196);"><a href="https://abc.xiaobaitiao.club/#/login" target="_blank">项目部署地址</a></strong></p> <p>欢迎在读者留言组件进行留言(采用的是移动弹幕形式)</p> <p><strong style="color: rgb(65, 131, 196);"><a href="https://github.com/luoye6/Vue_BookManageSystem_backend" target="_blank">项目GitHub地址</a></strong></p> <p><strong style="color: rgb(65, 131, 196);"><a href="https://gitee.com/falle22222n-leaves/vue_-book-manage-system_backend" target="_blank">项目Gitee地址</a></strong></p> <p>欢迎⭐Star和⭐互关</p> <p><strong style="color: rgb(65, 131, 196);"><a href="https://luoye6.github.io/" target="_blank">个人博客地址</a></strong></p> <p><br></p> </div> </body> </html>

下载 APP