# 到5万就好了!

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

🤔 有小伙伴问傅哥,什么时候写项目,才能有自己的思路。可以读懂代码可以调试bug可以扩展功能。现在比较慌,现在遇到个报错,只想扔给傅哥。🎙️叠个大bug,再发一串报错,愿傅哥的周末不寂寞😂。

答案是,不多,当你有5万行,有效代码编写的时候,你甚至可以横着走🦀。

以我为例,在整个技术学习积累阶段,新人小白时,是最容易犯错的。那些明明看来很简单的环境配置空指针异常断点调试数据库连接密码错误等,都需要花费很长的时间来解决。当需要寻求帮助的时候,对错误的描述也不够准确。甚至也不会想到要告诉对方,自己是在什么场景、什么环境、执行了什么流程、发生的什么错误。

针对这样的情况,小傅哥给新人伙伴分享一些常见简单错误的处理手段和正确的把错误信息描述出来,同时再分享个从小白到入门进阶的学习路线。这个路线,也是将来冲击P7(50k)综合工资的路线。

🧧文末有8个,互联网公司级实战项目,提高面试竞争力!

# 1. 常见错误

在小傅哥的星球「码农会锁」中,有这么一个标签 #Bug笔记 专门记录一些常见的错误信息和处理手段。这些错误来自于伙伴们,在实战项目学习中,所遇到的一些常见问题的解答。对新人伙伴的帮助是非常大的。示例如下;

# 1. java.lang.ClassFormatError

场景:星球伙伴在运行API网关项目时,报错,java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module

原因:Dubbo 通过反射 Api 访问 defineClass ,但是在 JDK 9 以上,JPMS 模块化,就不让访问了。

方案:可以通过添加配置「--add-opens java.base/java.lang=ALL-UNNAMED」临时解决,但可能会引起其他问题,所以切换为 JDK 1.8 比较稳妥。

# 2. Unable to find a @SpringBootConfiguration

场景:星球伙伴在学习项目,搭建模块化module工程的后,运行测试代码,时长遇到; Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

原因:其中一个原因是没有注意到包的路径问题,因为默认情况下 Application 扫描 Bean 对象,需要保持一个上下层的关系。如;Application 在 cn.bugstack 下,那么其他对象就要在 cn.bugstack.xxx 下面。这样才能扫描。在 Spring 中讲究约定大于配置,如果不保持包的结构,就会引出很多其他的配置问题。与其额外增加配置,不如遵守开发约定。

# 3. Failed to configure a DataSource: 'url' attribute is not specified

场景:星球伙伴在学习OpenAI项目中,自己对照工程搭建项目,启动运行 Application 后在控制台发现报错如下「这也是很多伙伴在搭建项目中常见的一个错误」【图1】;

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (the profiles dev are currently active).
1
2
3
4
5
6
7
8
9

原因:因为小伙伴在搭建项目的时候,【如图】引入了 MyBatis、MySQL 的数据库连接配置,那么 SpringBoot 在自动装配 DataSourceAutoConfiguration 的时候会找相关的 MyBatis 连接数据源配置。但此时 yml 中又没有提供相关的数据源配置,所以会报错「一种是自己学习忘记配置,另外一种是课程本节未使用到数据源,但自己先引入了 MyBatis 也没配置对应的连接信息」。

处理

  1. 早期项目如果没有使用到 MyBatis、MySQL,可以从工程中排出。pom 根目录可以做版本引入,但不在 app 中做具体的引入。这样项目就不会加载了。
  2. 通过 @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})排出掉数据源的自动装配【如图】。

# 4. java.lang.IllegalArgumentException: Result Maps collection does not contain

场景:星球伙伴在做大营销项目的时候,编写第一个查询数据库接口,配置完 MyBatis 的时候,遇到这样一个报错;

java.lang.IllegalArgumentException: Result Maps collection does not contain value for org.example.infrastructure.persistent.dao.IStrategyDao.dataMap
1

心里:心里处于崩溃状态,怎么可能,代码已经编写了,这也没有错,为啥呢。【图1】

原因:如图2,因为字母写错了。这也是一个手敲代码很容易写错的。

处理:检查 MyBatis Mapper 中,所有写错 dataMap 的地方进行修改。

# 2. 学习路线

编程不是看的,经验不是背的。最好的学习方式是下手实践,一个个编程所需学习的技术,用案例锻炼,在结合案例到项目中实践。以项目完成为导向,用项目驱动学习,有就可以少走很多弯路了。

看到不少伙伴还在死扣 Servlet、JSP、Hibernate、Struts2,真的,这类项目别做了,这类技术也先放放吧,面试不问的,工作也不需要的。我按照互联网企业常用的技术,给大家梳理一套清晰的学习教程。

  • 基础教程,这部分也就是大家简历中所体现的专业技能部分。这些技能覆盖到以后,基本也就匹配上市面所有Java类的互联网公司了。
  • 实战项目,不只是简历,也包括企业,项目主要分为这样4个类型。业务、技术、组件、插件,还有一类是源码。互联网公司中不少是根据源码做的二次封装,开发了一个符合企业所需的软件。在这条路线学习上,给纯小白伙伴准备了一个既有深度,又手把手带着做的**《大营销项目》**。在这个项目中,小傅哥把业务流程、架构设计、脚手架使用、设计模式、场景方案、工程测试、接口对接、工程打包、服务上线、简单压测等,全部都给体现出来了。有了这样一个积累,在去看其他的项目(也是从0到1的)会更加得心应手。之后在一个简历中,你可以用业务项目 + 技术项目/组件项目,来组合使用,这样可以让自己的竞争力更强一些。
  • 技术方案,这是一种技术视野扩展的手段。小傅哥的内容体系是衔接着公司实践级别的,这样也就能让加入小傅哥星球的伙伴,具备学习到真实场景的设计技术。这些东西可以让你有更多内容的了解。
  • 面试相关,职场、简历、招聘、八股,这是在我们有了核心技术和实战项目这个大基座上面的生活,我会用这么多年的实践能力,帮助你成长。无论你是处于哪个阶段。

# 3. 出成绩了!

我从没想过做这些成体系的内容,只单纯的为了满足大家面试。面试只是职业生涯中一个很小的过程,而更重要的是想办法把大家的技术能力拉升到腰部以上,这也是任何一个行业的本质逻辑。腰部以上赚钱,腰部以下求温饱。

所以小傅哥的星球「码农会锁」,是小傅哥按照一个中大型互联网企业的标准,进行教程的开发。让一个小白沿着这条路线,可以从基础内容、理论内容、项目内容、架构内容,一步步成长起来。星球中现有的伙伴,在经过这些内容的学习,可以说是得到了非常大的进步。

  • 来自于星球「码农会锁」伙伴们的学习记录。
  • 小傅哥本身也是互联网大厂的架构师,在工作中也有架构设计、业务开发、组件开发、培养新人、技术分享等工作。所以在小傅哥的星球你就相当于在小傅哥所在公司,接受架构师对你的培训,是一样一样滴。

# 4. 加入学习

跟着小傅哥学习项目可以获得的收获;我可以按照所在互联网大厂的标准,从需求设定框架搭建领域设计库表设计功能开发项目打包发布部署运维监控简历编写面试解析,这样一整条线的内容,全部交给你!有了这样一套的组合,那你学习完找份工作还不是嘎嘎滴容易!

这样的项目学习在小傅哥星球「码农会锁」有8个,每个都是从0到1开发并提供简历模板和面试题,并且还在继续开发,后续还将有更多!价格嘎嘎实惠,早点加入,早点提升自己。项目地址:https://gaga.plus (opens new window)