JavaRush /Java 博客 /Random-ZH /一位老人文主义者如何走向IT
PieIsLie
第 35 级
Санкт-Петербург

一位老人文主义者如何走向IT

已在 Random-ZH 群组中发布
焰火!事实上,我想了很长一段时间我到底要在这篇文章中写什么,以及我是否会写它。碰巧的是,在过去两年的不同时期,我以不同的方式评估了自己获得 Java 开发人员职位的机会:从“迟早 - 肯定”到“我在 IT 领域没有机会”。 一位老人文主义者如何走向IT - 1然而,距离我注册 JavaRush 已经过去了几乎整整两年。几个月前,我收到了第一份工作邀请,不久之后,我收到了第二份工作邀请,然后我开始了一份新工作。成功案例在课程期间对我帮助很大,因此我决定发布自己的成功案例。由于该课程是在 18 年举办的,因此某些信息可能不是最新的。我马上就会说会有很多文字,因为…… 我会尽力告诉您有关培训和求职的信息(要求、回应、技术规范、面试等)。我还将写一些对我个人有帮助并且可能对其他人有帮助的一般提示。 简单介绍一下我自己: 32岁,10年管理和销售经验,文科教育,完全没有技术背景。几年前,我尝试学习 C++,然后又学习 Python,结果除了头疼之外一无所获。因此,很难称我为才华横溢的开发人员:恰恰相反。

第一阶段:培训

我有意识地来到 JavaRush:充足的每月价格表、清晰的材料结构、大量的实践以及我自己的社区的存在。第一点很清楚,但是学习一门没有结构的语言是相当困难的,这样的训练肯定会让一个人在 Java Core 方面有严重的差距。 面试和技术规范的经验表明,有关“核心”的问题可以用于一切:从按位移位和泛型转换到 IO 和序列化。实践是必须的;如果我自己写的话,我仍然只能理解和记住一半的东西。好吧,社区:你解决了问题 - 在评论中吹嘘它;如果你还没有决定,欢迎你提出问题,但很可能没有人会给你现成的解决方案。即使在完成课程后,我又回到了关于免费主题的自定义文章,那里有很多好东西可供开始(尤其是使用分步示例+面试问题的框架的第一次体验)。总的来说,我很感谢这个项目为我提供的基础,但我不会仅仅依赖 JavaRush - 同样的 Shildt 最重要的是与正在研究的主题“重叠”,并且经常揭示一些观点。评论中已经说了很多关于有时超越理论并迫使你去谷歌的任务。对我来说,这更多的是优点而不是缺点——而且现在的情况与我学习时的情况并不相同。 对那些像我一样“从头开始”进入 Java 的人的直接建议:在某些阶段,您可能会变得无聊或困难:
  1. 从零开始对每个人来说都很困难;上帝保佑,只有 5% 的人能完成课程。你的任务就是成为他们中的一员。

  2. 一两个月后,当任务变得更加困难和有趣时,我的兴趣就出现了。要有耐心。

  3. 最重要的是每周的进步。休息了两周,回来已经很困难了,而且不是每个人都能连续几个月每天都写的。给自己一周的工作时间设定一个限制 - 例如 15 小时。您可以每个工作日编码 1.5 小时,每个周末再编码 3-4 小时,或者您可以休息几个晚上,但“周末限制”会限制您的工作时间。增加。这样,日程安排就会灵活但有规律。当然,这样就可以通过任务和项目来衡量工作,但在语法和内核级别,小时就足够了。
总的来说,尽管我可以负担假期和短暂的休息,但我花了大约 5 个月的时间完成了课程(在获得实习机会之前) ;同样,每周工作五天,只有周末和工作日晚上 22 点到 00 点有空。因此,通过宽松的日程安排或严格的训练制度,您可以更早地应对。然后我就打算去实习,但最终没有成行。

第二阶段:自我教育

所以,我没有得到实习机会:我只在技术要求上留了几天时间,直到入组结束,没有时间去弄清楚要求——生词太多。因为 我不想再等三个月,我决定自己继续前进。幸运的是,所有流行框架都有指南和视频教程。在接下来的几个月里,我接触了 Spring MVC、Spring Boot + Data、Spring Security、Hibernate、jUnit、Maven、Git、RDBMS,掌握了 SQL 并尝试将它们整合为一个整体。六个月后,我的项目现在看起来很可怕,但我获得了使用“成人”框架和 GitHub 的实践经验,可以应潜在雇主的要求展示这些经验。 建议
  1. 越早了解 .gitignore 越好。;)

  2. 许多指南同时包含多个框架;使用这个并添加你自己的。我们使用 Maven + Spring Boot + Data 编写了一个在线商店 - 添加授权、单元测试和日志记录。

  3. 对于 Web 项目,您可以从 Internet 获取免费的前端模板 - 它们使用起来更愉快,并且作为 Git 上 README 中的屏幕截图看起来更好。同时,您将能够记住 HTML 和 CSS - 您可能需要更正样式和布局。

为自己制定这样的开发计划的最简单方法是查看 HH for Junior\Middle Java Developer 职位空缺,看看哪些技术和框架最常被提及。把它们写下来,为它们制定技术规范,为自己设定实施的最后期限。不过,也许如果我从当地实习开始,我就不必花几个月的时间在家庭项目上。

我错过了什么(后来面试时被烧伤了)

  1. 算法。为了避免我的错误,我立即推荐一本俄语短书《Grocking Algorithms》。算法的复杂性是什么,它由什么组成,为什么快速排序还不够,图论简介 - 一切都在那里,并且以最容易理解的语言。

  2. “幕后”收藏。我不记得这是否是在 JavaRush 中,但了解 HashMap.get() 的工作原理或为什么 HashSet 不能保证保留元素顺序很有用。再说一遍 - 哪些集合是线程安全的以及为什么。

  3. SQL。您至少需要 JOIN - 它们是什么、它们如何工作、在纸上的两个表上即时编写 SELECT 的能力。我推荐 www.sql-ex.ru:它将在一两天内带您达到所需的水平。

  4. Spring Core:有哪些注解,什么是上下文,bean是如何创建的,哪些Bean Scope是线程安全的,如何解决相互注入——都是面试题。如何返回页面,如何返回JSON等。我目前正在阅读俄语版的《Spring 5 for Professionals》,但总的来说,他们推荐《Spring in Action》。

第三阶段:找工作

事实上,在完成家庭项目后的头几个月里,我(通过 HH、LinkedIn、招聘机构)向各种初级/实习生职位空缺发送了大约 30 份回复,但结果几乎为零。我只关注没有经验的职位空缺,诚实地指出了我熟悉的堆栈,并在求职信中写下了我的高学习能力。结果是两次电话(其中一次直接以我中级前的英语结束),另外两家公司发来技术规范,只有一次“会议”,然后我一个人在一张纸上解决算法问题,然后HR就把文件拿走了,然后“我们会给你打电话”。我尝试过几次实习(无薪和有条件付费):我做了技术规范,但没有超出最终的社会保障;但现在我可以说,实习生肯定是T-Systems、CFT、Andersen和EPAM招聘的(他们的评价褒贬不一,你自己决定吧)。对我来说,如果你有机会在没有收入的情况下坐几个月而不死,这是进入这个领域的好方法=)总的来说,在这次经历之后我变得有些沮丧,并暂停了整个故事的搜索将近六个月 - 我继续研究之前的配置文件,只是为了好玩编写了一些应用程序,但甚至没有将它们发布到 Git 上。直到我遇到一个熟人,我随口向他讲述了职位空缺的失败:当时他已经是一名中级开发人员,但他以同样的方式开始——自学。 一位熟人给了我一些推荐,他自己也用了这些,这对我以后找工作有很大帮助。你是否跟随他们取决于你,因为...... 从某种程度上来说,他们并不完全诚实。因此,进一步引用:
  • 无论如何,在简历中为自己提供 6 个月以上的商业经验:实习、毕业项目、自由职业、远程工作 - 等等。这对于HR初审简历阶段有很大帮助;

  • 从简历中删除“Junior”和“期望薪资”一词;就将其保留为 Java 开发人员,并与每个公司单独讨论资金;

  • 在你说出你的期望之前,尝试让人力资源部门说出提议薪资的“叉子”。如果一家公司提供80-120k,而你正在寻找40k或更多,一些选择者会鄙视你;

  • 适用于适合您堆栈的所有职位空缺,即使它们需要 1-3 年的商业经验。

在我遵循所有这些建议后,搜索情况显着改善。首先,在大约 12 条新回复中,有一半几乎立即以会议、Skype 或 TK 结束(这与前几个月被忽视的情况已经有很大不同)。其次,人力资源人员开始给我写信,但我没有回复——通过即时消息、邮件、LinkedIn。第三,商业经验的要求其实并不太严格——很多公司愿意与不符合1-3年企业实践范围的候选人进行交流。 结果是——一份给初级员工的offer,一份给有试用期的中级员工的offer。整个搜寻过程花了两个月的时间。 建议
  1. 在你的简历中包含你使用过的整个语言、技术和框架。

  2. 在 LinkedIn 上注册——那里确实有很多来自不同公司的人力资源人员。仔细填写您的个​​人资料 - 事实上,这也是您的简历。要发展您的联系人网络,请添加与您的个人资料相关的 LION;他们接受所有用户的请求。

  3. 尝试一下免费的 Java 测试 - 这些测试通常在初级面试之前以纸质形式进行。最好提前做好准备。

关于面试的几句话
  1. 他们总是询问有关藏品的信息:有哪些藏品、它们有何不同、何时是使用它们的最佳时机。

  2. 总是在抽象类和接口上——它们可以有方法、字段吗?哪些是可以继承的,等等。

  3. 几乎总是在多线程上——你在工作中使用了什么,关键字,方法,你是否熟悉util.concurrent。

  4. 通常在使用内存时 - 堆、堆栈,以及这些字符串是否相等,以及这些对象,为什么。

  5. 有时关于算法 - 你知道哪些,复杂程度如何,为什么,你现在可以写一个算法吗?

  6. 有时基于模式 - 您知道哪些模式,您使用哪些模式,编写单例或工厂。

  7. 有时在 SQL 中 - JOIN 类型、事务是什么、如何在 JDBC 中进行事务、编写一个简短的查询。

事实上,一切都很大程度上取决于公司:有人不会问关于 Java Core 的任何问题,但会花 40 分钟谈论框架和 SQL;有些人根本不使用流行的框架,只询问算法、类型、集合和内存。大约一半的会议以测试开始——有时用俄语,有时用英语(20-30 个问题,持续 20-30 分钟);通常问题的级别是“这是代码,它是否会运行,如果不运行,那么在哪一行”或“这里有几个对象,经过 N 次操作后它们是否相等”。 关于技术规范的几句话:70%开始沟通的公司在会议之前或之后向我发送了技术规范。通常,完成时间从几天到一周不等,但大多数情况下,最后期限可以稍微移动一些。任何东西都可以用作技术规范。以下是我做的例子:
  • Salesforce 个人资料业务联系人页面,可编辑和添加新记录;

  • 使用带有控制台控制的 Spring 状态机模拟多层建筑中的电梯;

  • 基于 LibGDX 库的 Android 应用程序,按下按钮时可逐字符输出文本;

  • REST模仿汽车共享,通过HTTP请求添加客户端并返回JSON;

  • 通过自由单元对无向图进行排序的问题;

  • 使用文件中的坐标搜索等腰三角形;

  • 使用 Stream API 重构已完成的代码;

  • 支持三元表达式的 UI 计算器;

  • 将结果写入文件的线程竞争。

有时要求计算方法被单元测试覆盖,查询方法被要求被集成测试覆盖。 建议
  1. 不仅要尽力完成任务,还要确保代码符合OOP原则。

  2. 检查你的代码的效率 - 我曾经被拒绝,因为除其他外,我使用 PrintStream 而不是 BufferedWriter。

  3. 以 50% 的余量来规划你的执行时间——早点开始和结束比在截止日期的早上八点进行 git Push 更好。

好吧,我想我写的都是我想要的。最重要的是,水能磨石。你不可能用Java写了很多很多,然后找了很长很长时间的工作,最后却一无所获。如果一个 30 岁的人文学科专家能做到这一点,你甚至可以做得更好。最重要的是不要害怕第一次电话、技术任务和面试:在每次失败之后,我都保证可以为自己学到一些东西并改进它 - 时间越长,你就越有信心。如果某个地方变得混乱或有错误 - 我提前道歉,写信,我会纠正它。我希望我的经验至少能帮助某人=)
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION