【云驻共创】java学习应用以及就业之道
摘要:作为一名 Java 赛道热心选手,回答这个问题再合适不过了,帮你梳理 Java 学习心得,还有我珍藏多年的学习方法以及技巧,并根据所需基础完成代码迁移实验,以及其中需要你从中学到什么基础概念,最后详细说下就业面试的哪些重要事情。
本文的主要内容有:
- 一 私藏多年的学习方法
- 二 技巧有哪些
- 三 实验基础讲解
- 四 完成 Java 代码迁移
- 五 Java学习阶段分析
- 六 Java学习应用场景
- 七 面试的哪些重要事
一 🎨 私藏多年的学习方法
作为过来人知道哪些坑能够避免,这里分享刚开始我学习 Java 的时候心法,包括习惯和技巧等,帮你少走些弯路,一家之言仅供你参考。
1) 然后要多类比
我们知道 Java 是它是面向对象语言,其中一个重要特征就是多态,该如何形象理解呢?书面的定义是:“ 接口的多种不同的实现方式即是多态 ”。估计你还是很懵,这样我们从生活中常见例子来进行加深理解,譬如语文的针对同一个字的不同发音就与之很类似;
我们再举个容易搞混淆问题,静态内部类与内部类有什么区别呢?我觉得呢其中一个最重要的是静态内部类不需要指向外部类的引用的,但是非静态内部类需要持有对外部类的引用;
就好像外部类就像父亲,静态内部类是干儿子一样,而非静态内部类就是亲身的是有血缘关系,这个非静态内部类它就是有特权,能够直接访问外部类的静态与非静态成员
但作为“干儿子”的静态内部类不能访问外部的非静态成员,没有“儿子”的特权,它只能访问外部类的静态成员,如说你果这样去理解你就会发现容易理解很多。
2) 要理论联系生活
就说“吃饭”,你可以请我吃炒面,吃黄焖鸡或者抄手,这些都是吃饭这个大类型的具体实现。其中 run()是接口里面的抽象方法,“狗”这个类里的方法是四条腿跑的;和 “人”这个类里面的方法是两条腿跑的;这两个类都实现 IOperator 这个接口,又因为接口不能实例化,所以它必须依赖子类,就是测试类里面的Peron类,那就是父类对象绑定子类对象,然后我们这个接口对象operator
调用的是实现类Person里面的run(),所以打印“人事用两条腿跑的”。
但是这种理解还不够,还可以再往上提升。上面我们绑定的对象要修改代码才能进行绑定的,那么Java是编译性语言,从字节码文件修改成java文件这个开销有点大了啊。
上图把绑定对象的关系拆分到属性文件里面来控制接口绑定的子类对象,因此把对象的路径描述到了属性文件,然后通过文件解析通过路径把它加载过来,通过 Class.forName()得到类绑定路径,这属于反射编程思想,newInstance()创建类的一个对象,然后把这个对象向下转型转成,还要了解反射,然后深入理解为什么要反射。
看上面图,我们在同一个包下写一个测试类,然后要绑定猫的这个类,这里我们再添加一个静态块来解析这个文件,那么这个静态块是流进行最先加载,只执行一次的哈**,这个会有一个检查性异常;把文件内容加载到 Properties 这个静态属性里面去**,然后使用p.getProperty("bindobject")
返回有路径的字符串;就是打印下面的结果,我们上面那个图是用的面向对象的编程思想。现在我们用反射来获取路径字符串。
//Java反射来创建对象
Ianial an = (IAniaml)class.forName(path).newInstance();
an.eat();
//修改配置文件,从而达到绑定关系
Ianial an = (IAniaml)class.forName(path).newInstance();
得到的是object类型所以我们要向下转型成IAniaml类型。但是用户的需求发生变化了啊!必须现在的实现能够兼容后面新的需求;在properties文件后面点上Dog这个属性不就行了,打印的是狗吃骨头。这里我们没有修改Java文件哦,所以这种绑定关系是一种弱绑定,体现在用配置文件来绑定。
在开发过程中第一种是强绑定,属于父子关系,比如生活中要证明是父子关系那肯定没有父子证,那么这种弱绑定就像夫妻关系,就是用结婚证来证明,这种弱绑定更加灵活。但是如果是对象来绑定它是一种强绑定,这种绑定不容易拆分,这样不具备灵活性,这种不太适用;
3) 从错误中积累经验
在开发中遇到问题是很锻炼我们的,遇到异常的情况,第一是害怕,无助h或者找他人求助。那是因为你自己没有去想啊,我们现在看下面这代码的错误。
Test创建出来的t对象是一个空对象,那空对象怎么可能有hashcode值嘛。所以一定会抛出空指针异常,我想要表达的是工作里面就是说白了改bug,你这点调试的能力都没有迟早被开!
4) 坚持写技术博客
可以在我们社区里面写你遇到的异常嘛,把自己的理解更加深,到时候如果你遇到问题了,你知道你以前犯过这种错误就会到博客里面去找,并且也会遇到很多牛人就能学习他们成功的经验也是对你帮助很大的哦。
5) 理论必须要与实践结合
我们华为开发者学堂里面有技能评测,你初学者自己学到的程度是怎样,或者已经工作看下自己那些技能还需要加强的地方,最后可以做下这些试卷;可以很好评估目前你已经掌握情况。
6 )与实践结合(微认证)
如果说你很多试卷已经会做了并且还不错,这个时候我们还给你提供证书不管在你面试还是技术上面都是加分项,比如说云原生背景下,openGauss数据库是非常火可以考下,对自己帮助也很大。
二 🚀 技巧有哪些
1) 看视频 VS 看书
有些同学一上来就拿《Java 程序设计》这本厚书来看,内容是比较晦涩,对于初学者你是很难读懂容易放弃。我的建议是先找一门质量很高的 Java 基础视频课程。比如某硅谷的经典 Java 入门学习视频,这个可以到 b 站去找,然后要静下心来认真好好学!
正确步骤
:然后跟着敲代码做笔记直接写在注释里面,如果说对于有些不理解地方要多看下视频的技术细节,然后用自己的话归纳总结在你自己注释里面,隔 20 分钟不看视频把代码注释复制到记事本里面,然后到 IDEA 里面删掉代码注释留着,根据自己的总结与回忆在写一遍,在第一遍你可能在一些难点的代码你会卡壳给自己 5 分钟思考,如果你还是没想起来,那么恭喜你那你肯定是忘记啦!
这个时候不要给我死磕给我浪费时间,马上去看记事本里面代码进行理解后,关掉记事本重新回到 IDEA 删掉注释,然后重写一遍编码;这样当天,明天,一周严格循环来写代码;这样你记会比较深刻一点然后隔一周总结下你的代码发现有什么规律可以直接拿来用没有,熟练了对于日常开发已经足够。
2) 基础要深入
集合,并发与 MYSQL 这些比较基础东西,你最好能够了解下源码是怎么写的,虽然前期是比较耗时间的,但是对于对后面框架的理解帮助是很大的。
譬如 Spring,dubbo 能去理解并深入;另外算法是稍微大点的公司都是逃不掉的笔试题,虽然可能在工作中用到的机会很少,但是这是考察你软件设计的一种能力,对以后思考技术问题的解决帮助很大。
不理解的地方一定要画图,有些概念是抽象的你很难理解,比如内部静态类,内部类与外部类关系是咋样的?
推荐在线画图工具drawio
3)重在实践总结
这个我就不得不说八股文的问题,个人是很反感这个东西的,简直面试造火箭,工作拧螺丝,但是面试时间只有那么短能考察面是很少的,但是要理解地背这个东西市场就是这样的,但是我想强调一定要自己亲手做一遍甚至多做几遍。
背一遍有啥用呢?不知道怎么做,到官方文档里面有更加详细描述如何做,而且过程中你是很难出错的。如果出现技术问题你还是解决不了啊,那个东西又不是生搬硬套。
另外这个如何实践,一开始在 IDEA 不要下很多插件,我看有些人下驼峰命名插件笑了,你个不是你必须得知道的吗,另外最好到官网上去看文档哪里比较详细完整,StackOverflow 里面提问,不要到 CSDN,博客园哪些网站找一是不完整,二是太啰嗦不全面。
4) 搞清编程思路再写
思路很重要,如果交给你完整的实现一个全新应用项目,你就不知道从哪里开始,这里你没有梳理下你思路。
甚至好多初学者过个一头半个月都不知道项目里面运用了哪些知识点,重点都不知道比比皆是连项目本身都忘记了,哪怕这些项目是自己亲手跟着视频敲出来的。
这不是某个自学者特有的问题,这简直是持续学习过程中的必然。
其实,从知识点到实践这两者要实现的跨越便是「编程思路」。
编程思路是一个挺大的概念,如果想要完全掌握它,那么需要我们长期的积累,来把思路分析的方式变成一种本能。这是一个长期积累的过程,没有办法一蹴而就。
首先什么是编程搞清楚?
对于咱们开发来说,工作就是编程,也就是说我们每天工作的内容就是编程。
那么编程的目的是什么?或者说我们通过编程想要达到的结果是什么?
有些同学可能会说,编程就是为了赚钱,或者我们编程就是需要完成一个程序。这些都没错,但是却并不全面。
我们编程的最终目的其实就是:为了解决社会现有的一个问题。为了解决这个问题而使用某种程序设计语言编写程序代码。
然后什么是思路?
了解了什么是编程之后,我们来看什么是思路。
我们知道编程其实就是:为解决某个问题而使用某种程序设计语言编写程序代码。 那么对于程序来说,他就是由一个一个的功能点来组成的,我们去实现每一个功能点的时候,对于这个功能点,我们去实现的一个思路,那么就是编程的思路。
那么把这两个概念组合到一起,我们来定义一下什么是编程思路。
所谓编程思路就是
-
为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到相应结果的过程就是我们的编程思路。
-
如何将编程思路应用在项目实战当中呢?自己摸索效率低下,有人带会快一些。
-
能够将编程思路在实战项目中熟练应用各种思想、设计规则等等才是关键所在哦!
三 ⛑️ 实验所需基础
1) EIP 是啥
EIP指弹性公网 IP,说白点就是你能买到并持有的公网 IP 地址资源,这个需要搭配 ECS 实例,或者专有网络类型的私网 SLB 实例等等进行使用。它基本原理是用云上的公网网关用 NAT 方式映射到了被绑定的资源上,这个资源它是可以通过 EIP 与公网进行通信。
下图通过 EIP 访问公网
但是需要你注意一点,这个 EIP 与 ECS 公网 IP 是那是两码事
ECS 公网 IP:购买 ECS 云服务器时,只要选择公共网络宽带,系统就会自动将公共网络 IP(IPv 4 地址)分配给云服务器。ECS 的独立公共网络 IP 不支持解绑,不能绑定到其他实例。因为 ECS 的公共网络 IP 地址是独立,而不是共享的 IP。
区别如下所示
弹性公网 IP 与其他服务关系如下这样
详情请查看:https://support.huaweicloud.cn/productdesc-eip/overview_0004.html
它优势有哪些
- 1 独立购买与持有
你可以单独持有一个 EIP,作为你账户下一个独立的资源而存在,无需与其他计算资源或存储资源绑定进行购买。
-
2 弹性地绑定
需要用的时候把 EIP 绑定在需要的资源上比如 ECS,在不需要时,将之前绑定并释放,避免不必要的计费。
-
3 可配置的网络能力
你可以根据自己需要随时调整 EIP 的带宽值,宽度的修改即使生效。
云服务器的弹性公网 IP 地址可以通过点击“控制台”->“服务列表”->“计算”->“弹性云服务器 ECS”进入服务器列表,进行查看并复制即可。
2) RAM 是啥
翻译就是“访问控制”,RAM 其实是华为云给你提供的管理用户身份与资源访问权限的一种服务而已。
2.1 有什么用
RAM 它允许在一个华为云账号下创建并管理多个身份,并允许给单个身份或一组身份分配不同的权限,从而实现不同用户拥有不同资源访问权限的目的。RAM 的功能特性如下:
- 集中控制 RAM 用户及其密钥:管理每个 RAM 用户及其访问密钥,为用户绑定多因素认证 MFA(Multi Factor Authentication)设备。
- 集中控制 RAM 用户的访问权限:控制每个 RAM 用户访问资源的权限。
- 集中控制 RAM 用户的资源访问方式:确保 RAM 用户在指定的时间和网络环境下,通过安全信道访问特定的阿里云资源。
- 集中控制云资源:对 RAM 用户创建的实例或数据能进行集中控制。当用户离开组织时,实例或数据它不会丢失。
- 单点登录 SSO(Single Sign On)管理:支持与企业身份提供商 IdP(Identity Provider)进行用户 SSO 或角色 SSO。
比如企业购买华为云服务后,应用程序通过访问控制(RAM)可以获取 RAM 角色的临时安全令牌,从而能访问华为云。
2.2 IAM(统一身份认证)
是华为云提供权限管理的基础服务,可以帮助您安全地控制云服务和资源的访问权限。IAM 无需付费即可使用,您只需要为您帐号中的资源进行付费。
有什么用呢
权限管理
您可以给员工创建 IAM 用户并授予不同权限,IAM 用户可以使用独立的用户名和密码登录华为云。配置案例请参见:多运维人员权限设置案例。
委托其他帐号或者云服务管理资源
帐号委托:将帐号内资源的操作权限委托给其他华为云帐号。配置案例请参见:跨帐号的资源授权与管理。
云服务委托:由于华为云各服务之间存在业务交互关系,将云服务的操作权限委托给其他云服务,使云服务之间可以进行协同工作。
安全管理
您可以通过设置登录验证策略、敏感操作保护、密码策略及访问控制列表来提高用户信息和系统数据的安全性。
有什么优势
1 对华为云的资源进行精细访问控制
您注册华为云后,系统自动创建帐号,帐号是资源的归属以及使用计费的主体,对其所拥有的资源具有完全控制权限,可以访问华为云所有的云服务。
如果您在华为云购买了多种资源,例如弹性云服务器、云硬盘、裸金属服务器等,您的团队或应用程序需要使用您在华为云中的资源,您可以使用 IAM 的用户管理功能,给员工或应用程序创建 IAM 用户,并授予 IAM 用户刚好能完成工作所需的权限,新创建的 IAM 用户可以使用自己单独的用户名和密码登录华为云。IAM 用户的作用是多用户协同操作同一帐号时,避免分享帐号的密码。
除了 IAM 外,还有企业管理服务同样可以进行资源权限管理,相对于 IAM,企业管理对资源的控制粒度更为精细,同时还支持企业项目费用的管理,建议结合企业需求选择 IAM 或是企业管理进行资源权限管理。
详情了解更多:https://support.huaweicloud.cn/productdesc-iam/iam_01_0026.html
2.3 举个例吧
企业 A 购买了 ECS 实例,并计划在 ECS 实例中部署企业的应用程序。这些应用程序需要使用访问密钥(AccessKey)访问其它云服务 API。
有两种做法来:
- 把访问密钥直接嵌入在代码里。
- 把访问密钥保存在应用程序的配置文件中。
这样会带来两个问题:
-
保密性问题:如果访问密钥以明文形式存在于 ECS 实例中,可能会随着快照、镜像及镜像创建出来的实例泄露。
-
难运维问题:由于访问密钥存在于实例中,如果要更换访问密钥(例如:周期性轮转或切换用户身份),那么需要对每个实例和镜像进行更新并重新部署,这会增加对实例和镜像管理的复杂性。
咋解决
ECS 结合 RAM 提供的访问控制能力,给每一个 ECS 实例配置一个拥有合适权限的 RAM 角色身份。应用程序通过获取该 RAM 角色的临时安全令牌来访问云 API。
3) 虚拟私有云 VPC
即在华为云申请隔离,私密的虚拟网络资源池。用户可以基于 VPC 构建独立的云上网络空间,并配合弹性公网 IP,云连接等实现与 Internet,跨云进行私网互通。
从网络角度看 VPC
-
VPC 是一个用户专属的二层网络(提供用户专属的网络,能避免像经典网络的安全性问题)
-
配套资源丰厚,以 VPC 为单位进行划分(只能被 VPC 内的虚机所使用)
-
软件定义网络(SDN)
我的理解 VPC 本身也是云的一部分,就有点类似于 VPN,都是公共资源上隔离出一个个用户。VPC 是这么一种云,它是公有云管理,然后运行在公共资源上,但是保证每个用户之间的资源是隔离,用户在使用的时候不受其他用户的影响,感觉像是在使用自己的私有云一样,也可以理解成一种隔离资源的集合
四 🏆 完成 Java 迁移实验
用鲲鹏分析扫描工具识别 Java 软件中的依赖库,并在鲲鹏平台完成 Java 代码的编译迁移,目的让你熟悉 Maven 构建打包程序,并了解 Netty 打包过程及相关依赖是怎样,然后详细讲下其中涉及到的基础知识。
1)准备条件
① 看到沙箱给你提供的临时 RAM 账户与密码,如果没有点下预置按钮;
② 然后接受秘钥输入“yes”,并回车;
③ 输入密码:使用预置环境信息中云服务器名称为 ecs-netty 的用户密码(注意输入密码时,命令行窗口它不会显示密码,输完之后直接键入回车)。成功登录云服务器之后如这样;
实验过程中不要关闭该 Terminal 窗口,否则要重复此步骤重新建立连接
敲黑板:后续操作请保持 Terminal 窗口与云服务器的连接状态,以确保所有的操作都执行命令在云服务器上面。
登录成功后,使用“dependency advisor”工具进行分析 jar 依赖。 执行下面命令下载分析工具
wget https://sandbox-experiment-resource-east-1.obs.myhuaweicloud.com/netty-praxis/Dependency-advisor-Kunpeng-linux-1.1.3.tar.gz
下载完成后,执行下面命令解压并进行安装 web 版的工具,所以下面有三个命令其中最后是执行安装脚本
tar zxvf Dependency-advisor-Kunpeng-linux-1.1.3.tar.gz && cd Dependency-advisor-Kunpeng-linux-1.1.3 && bash install.sh web
程序执行过程,需要输入时直接回车即可,共有三处如下面这样
大约五分钟,就能安装成功啦
然后安装完成后,在实验环境里面的浏览器里面新建 tab 页,然后输入地址“https://EIP:8082”然后访问已安装的分析工具。 注意这里 EIP 需要用你 ECS 的公网 IP 替换掉,然后访问这个地址就行
LANG=en_us.UTF-8 ssh root@EIP #EIP改成你服务器公网的IP
这时如果 https 它访问浏览器警告不安全,这个没关系的哈,你直接点击“高级”-> “添加例外”-> “确认安全例外”,他就不会进行警告,如下面这样
访问成功后,你的默认用户名:depadmin 密码:Admin@9000; 修改默认密码(自定义)然后重新登录,这一步看你有没有必要做,我的建议是可以不做哈哈 登录成功如下图
然后切换到“Xfce 终端”也就是你云桌面的那个黑色终端图标,输入以下命令,这一步是回到家目录下载所需要分析的源码包“netty-all-4.1.34.Final.jar”,如果说失败建议到下面网址下载到本地然后用 FTP 工具进行文件传输即可
cd ~ && wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/netty-all-4.1.34.Final.jar
然后输入以下命令创建“/opt/depadv/depadmin/netty”文件夹及“/opt/depadv/depadmin/netty/netty-all-4.1.34.Final”文件
mkdir /opt/depadv/depadmin/netty && mkdir /opt/depadv/depadmin/netty/netty-all-4.1.34.Final
然后执行下面命令把源码包“netty-all-4.1.34.Final.jar”解压到“/opt/depadv/depadmin/netty/netty-all-4.1.34.Final”目录下,注意下啊这里有五条命令在一起执行哈看清楚
mv netty-all-4.1.34.Final.jar /opt/depadv/depadmin/netty/netty-all-4.1.34.Final && cd /opt/depadv/depadmin/netty/netty-all-4.1.34.Final && jar -xvf netty-all-4.1.34.Final.jar && rm -rf netty-all-4.1.34.Final.jar && cd ~
2)进行软件扫描
切换到实验桌面浏览器显示已成功登录分析工具的页面,这个时候在网页上选择“分析软件安装包”,然后路径输入框输入 netty,就像下面这样
然后点击“分析”,分析完成结果如下这样
点开“依赖库文件”你可以看到“netty”发布的版本是 x86 版本,也就是 32 位的,它里面调用的库为 X86 下编译的,需要重新编译成 aarch64 位版本。
3)重新编译版本
3.1 安装 OpenJDK
执行下面命令创建一个文件夹并下载 OpenJDK 安装包
mkdir netty-4.1.34 && cd netty-4.1.34 && wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/OpenJDK8U-jdk_aarch64_linux_hotspot_jdk8u242-b08.tar.gz
然后执行以下命令把安装包解压
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_jdk8u242-b08.tar.gz
执行以下命令来创建安装的文件夹
mkdir -pv /opt/tools/installed/
执行以下命令把已解压的安装文件移动到安装文件夹下
mv jdk8u242-b08 /opt/tools/installed/
执行以下命令编辑配置文件
vim /etc/profile
键入“Shift+g”就可进入文件末尾,键入“i”进入文本编辑模式,在最后一行之后新起一行,复制粘贴以下配置
export JAVA_HOME=/opt/tools/installed/jdk8u242-b08
export PATH=$JAVA_HOME/bin:$PATH
如下图这样
编辑完成后,键入“Esc”退出编辑模式,执行以下命令回车,就能保存“/etc/profile”文件
:wq
3.2 安装 Maven
执行以下面命令来下载 Maven 安装包
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/apache-maven-3.6.3-bin.tar.gz
然后执行下面命令去解压安装包
tar -zxf apache-maven-3.6.3-bin.tar.gz
执行下面命令把已解压的安装文件移动到安装文件夹下面
mv apache-maven-3.6.3 /opt/tools/installed/
执行下面命令来替换 Maven 仓库配置
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/settings.xml && rm -rf /opt/tools/installed/apache-maven-3.6.3/conf/settings.xml && cp settings.xml /opt/tools/installed/apache-maven-3.6.3/conf/
然后执行下面命令编辑配置文件
vim /etc/profile
键入“Shift+g”进入文件末尾,键入“i”进入文本编辑模式,在最后一行之后新起一行,复制粘贴下面配置
export MAVEN_HOME=/opt/tools/installed/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
如下图这样
编辑完成后,键入“Esc”退出编辑模式,然后执行以下命令回车,保存“/etc/profile”文件:
:wq
执行下面命令使配置的环境变量生效
source /etc/profile
3.3 安装 apr-1.6.5
执行以下命令来下载 apr-1.6.5 安装包,如果失败可以先到https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/ 下载到电脑本地,然后用 FTP 工具(这里我用的 MobaXterm)需要你提前用 SSH 连接并设置文件是可访问权限就能传到合适文件夹下
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/apr-1.6.5.tar.gz
然后执行以下命令来解压安装包
tar -zxf apr-1.6.5.tar.gz
执行下面命令进入“apr-1.6.5”文件夹
cd apr-1.6.5
执行以下命令开始编译:
./configure
编译完成后,执行下面命令开始安装“apr-1.6.5”
make -j20 && make install
安装成功如下这样
4) 进行编译及验证
4.1.配置编译环境
执行以下命令下载自动化配置脚本,这样就不需要执行更多命令配置
cd /root/netty-4.1.34/ && wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/netty-praxis/set_netty_conf.sh
下载完成后,输入下面命令执行自动化配置脚本就 OK
sh set_netty_conf.sh
执行成功如下图所示:
执行成功意味着整个环境配置完成,现在可以顺利进行编译打包。
4.2 编译 netty-tcnative-parent-2.0.22.Final
执行下面命令进入 netty-tcnative-parent-2.0.22.Final 这个文件夹下
cd /root/netty-4.1.34/netty-tcnative-netty-tcnative-parent-2.0.22.Final/
执行以下命令开始 netty-tcnative-parent-2.0.22.Final 进行编译
mvn install -DskipTess
大约需要 6 分钟左右哈,编译成功如下这样
4.3 编译 netty-4.1.34-Final
执行下面命令解压并进入 netty-4.1.34.Final 目录里面
cd .. && tar -zxvf netty-netty-4.1.34.Final.tar.gz && cd netty-netty-4.1.34.Final
执行以下命令开始 netty-4.1.34.Final 编译
mvn install -DskipTests
大约需要 5 分钟,编译成功啦
4.4 验证编译结果
以下命令是对 netty-all-4.1.34.Final.jar 包进行分析,首先执行以下命令切换到编译结果文件夹下
cd /root/.m2/repository/io/netty/netty-all/
执行下面命令解压这个文件 netty-all-4.1.34.Final.jar。
jar -xvf 4.1.34.Final/netty-all-4.1.34.Final.jar && ls
解压成功目录结构如下
执行下面命令,进入 META-INF 目录,查看 netty-all-4.1.34.Final.jar 文件结构
cd META-INF/ && tree
结果下图所示:
发现里面生成的有 aarch64 版本的 SO 库,至此实验已全部完成
五 ⛳ Java学习阶段分析
我看了很多的Java书,你可以仔细看下目录顺序;他会把数据结构与算法放在多线程之前来学,为什么因为在Java集合里面的数据结构里面经常遇到同步与非同步以及锁,所以Java的数据结构一定是建立在多线程基础上的。 同时呢,建议是对于基础东西比如MYSQL,并发这些一定要研究深入,这些在工作中遇到频率非常高,像服务网关,消息队列这些大部分程序员是用的很少的,这种需要你每个中间件要都会熟练用就行啦。
另外就是你的表达要好 ,如果现在去面试问你面对对象的特点是什么?
继承,封装,多态
那什么是封装,目的就是提高数据访问的安全性。如果学习了反射,那么封装在反射调用机制里面可以暴力返回;另外封装应用还有内部类机制,内部类有四种:普通,匿名,静态,局部都是。另外就是继承,目的减少子类冗余,重复的属性和方法,提取到父类有用的属性和方法嘛。这样你自己思考的能力很强,最重要的是你沟通表达能力很好。最后我们在说下,AOP是把方法体内的业务控制代码和业务实现代码相分离。这里很抽象啊,业务实现代码就是你要到饭店吃饭,业务控制代码就是饭店给你一系列流程准备出来的饭菜,多态之前讲过比如方法的重载重写,从语文的多音字出发来理解。
你就按着上面顺序来学,多线程这块,我想介绍的是线程池,它是种保护线程资源的重要方式,目的就是能够复用资源减少性能消耗。算法是面试大厂必刷的,SPI是面向接口策略这个可以了解下,这个RPC就是远程方法调用,跟Java原生的远程方法调用还是有些区别的哈;
六 📖 Java学习应用场景
其实时代潮流已经从互联网过渡到物联网,可以与鸿蒙结合来玩转CodeLabs应用;来扩展你Java技术栈,你不要怕整个开发过程是很快的哈;
假如从数据库里面查一千条数据怎么做?第一种使用 SQL 语句,另外用分页在 PC 端,那么在移动端是怎么体现的?那么这个分页基于 SQL 分页;还是基于 Java8 的 stream.limit 相关类来结合的分页;还有是不经常变化数据我们是可以放在缓存里面;
String 类型不能被子类继承,String 里面的方法也就不能被子类的方法重写,因为 String 类型是软件的标准类型,不能多种实现,使用的频率也是非常高的。所以说子类的构造器一定是要依赖父类的构造器。
七 🤩 面试的哪些重要事
1 开发的前景咋样
几年前进入到 IT 行业感觉还行,现在发现学 Java 的人越来越多,初级 Java 已经饱和,并且这样就会把门槛变高,技术也变得更加深入。
总的来说,跟其他行业相比,做开发的岗位确实算是高新职业。我们那个时候起步的工资并不高,而看现在很多毕业的学生薪资都是 8000 起步,工资越来越高是肯定的,因为现在都伴随着通货膨胀。目前 Java 程序员如果拥有两年开发经验,他的薪资范围最少都要在 10K 这个阶段啊,所以就导致来转行学习 Java 的人越来越多,毕竟现在做其他很多行业都赚不到什么钱。
- 但是高薪并没有像大家想的那样容易拿到,很多人都认为身边的朋友有做 Java 开发月薪都几万几万的,但是我们往往忽略了他们在学习技术上付出了多少辛苦与精力,只是看到了别人表面的风光罢了
但是我认为问题的关键还是很多人忽略了学习 Java 语言的难度,想转行学习 Java 的人虽然不少,但最后真正能成功拿到高薪的也就是百分之一二的概率,这些人往往学习能力强,有强烈的赚钱欲望,并且不怕吃学习的苦,肯付出时间去研究学习。而很多人都想走捷径,以为参加个培训班就可以高薪就业,有这样想法的人都想的太简单了,线下培训班的水有多深,懂行的人都明白。
那 Java 自学到什么程度才能达到就业的水平
对于大多数初学 Java 的同学而言,最关心的莫过于我学要学习哪些和学到什么程度才能找到相关的 Java 研发工作岗位。
不同的软件公司对研发人员的水平要求存在一定的差异,如果从大多数中小型企业来看能接受一个入职到本企业的 IT 技术人员通常需要具备以下能力。
1 理解掌握 Java 核心面向对象的设计思想和 API 调用,能以面向对象方式设计编写业务功能;
2 熟练掌握至少两种数据库的开发,如 redis,mySql,能熟练编写基本常用及高级的 SQL 语句;
3 必需掌握并熟练应用 Springframework IOC 容器,深入了解 IOC 及 AOP 概念并应用,使用 MVC 实现对 web 请求做出处理;
4 熟练掌握 Java 处理数据库的 ORM 框架 myBatis,JDBCTemplate,对 Hibernate 也应有所了解;
5 熟练应用 Spring 增强工具集合 Spring boot;
6 至少熟练使用 Eclipse 及 IDEA 集成开发工具构建应用程序;
7 能够基本掌握 MVN GIT Maven 在项目中的使用;
8 前端开发必需掌握 HTML,CSS,Vue JavaScript 和常用的 JS 框架这些要了解
以上这些都是中小型软件企业的入职基本要求,如果你能够达到这个水平,找到一份 Java 工作应该是不难的。
2 推荐的学习方式:系统视频教程+书籍辅助+有人指导
视频教程:其实我推荐你看视频学习这也是最普通最直接的方式,视频教程会把工作中常用的知识进行讲解,而且视频一般都是分章分节,每一个小节都只讲一个知识点,学习起来较为明确。但是视频教程尽量要完整,最好是一整套视频学习。
书籍进行辅助:书籍便于对理论知识的快速补充,以便更容易理解 Java 面向对象核心设计理念和代码实践功能。
敲黑板:但是大部分人都没有耐心看不下去书,所以大部分人都是只看视频教程学习。如果自己能看的下去就看,看不下去就不看,还有可以找一些质量很高的文件或专栏这样能够很快吸收。
有人带你:大部分人都不可能全靠自己的能力把 Java 学的特别好,因为你不了解这个行业,也不知道怎么学,完全零基础自学 Java 想要找到工作,概率极低。所以建议如果真的想要做这行,尽量找人去带带你,有不懂的问题可以直接请教,少走弯路,提高效率。学习的质量决定以后工作的薪资以及起点,所以还是应该重视起来。
3 项目很重要
如果 Java 初学者看完一些视频,学过一段时间就说自己“会了”。这里我需要给大家纠正一个问题,希望每个学习 Java 的知友都能明确学习编程的中心是什么。 其实在我看来,学习编程从来都不存在会不会这样的说法。学习编程不同于初中学的数学、物理、化学,记住一些公式,做同样一种类型的习题,就证明类似的题型你会做了。 编程只讲技术能力是什么水平、什么级别的,最能证明技术水平处在什么阶段的。
就是在做项目的过程中,研发好的互联网产品,写代码的质量怎么样,排错能力怎么样,找 BUG 的能力怎么样,构思功能模块整体布局的能力怎么样等等。 做作为初学者想要达到入门的水平,就是自己具备了一些简单项目的编码能力,初学者最重要的一点就是培养自己的编程思维,每一个程序都是不一样的,你不可能都背下来,学编程也不是靠死记硬背的,你只有能去独立编码写一些东西的时候,才有就业的就会。
所以做项目的能力才能去衡量一个学习的水平处在什么阶段,而往往那些嘴上说“会了”的人,往往没写过多少代码,也一个项目做不了出来的,这就是纸上谈兵,完全曲解了学习编程到底在学什么,也不知道应该往哪里去。
所以一个合格 Java 初学者在学习的过程中,必须要有两个能拿得出手,能写在简历上的项目作为找工作的资本,并且要对于这两个项目的前前后后相当了解,才可能最后面试成功,一个初学者在学习完 Java 所有内容后,如若还达不到可以做简单项目的水平,那么他整个学习过程还是白费,没有达到最终的学习目的,就是学习质量不过关。所以项目的重要性希望大家都明确,因为有太多 Java 初学者不知道最后学习的目的是什么,最后白白的浪费时间。
4 学习心态要端正
学习编程一定不是一个简单的事情,换句话说它还是挺困难的,毕竟能出去找到工作,就是少则五六千,多则上万的工种。这些知识都不是随随便便就是任何一个人都能学会的。关于这个学习心态,希望提示大家要把重心放到“学习”这件事上,因为我发现有很多 Java 初学者都是像“完成任务”一样去学习,所谓完成任务就是“我把这些视频看完就能找到工作吗”“我把这些都学完就能找到工作吗”学完并不等于“学会”,这是两种不同的概念。
-
你到底理没理解啊?
-
你到底能不能用起来啊?
-
你到底用没用心啊?
你自己应该是最清楚的,我发现那些把学习当做完成任务一样去对待的,这样的人没有一个是有耐心的,自己在心里欺骗自己“把这些视频看完我就能找到工作”,到了最后自己就逐渐明白,完全是自欺欺人,最后放弃说自己不适合学这个。其实揭开这些人的面具真相就一个:他们没有耐心学习,也不喜欢学习,这是以前经历造成的,是多年的习惯导致的。
5 最终自学 Java 能就业的人基本具备以下几点
1)、有超强的学习耐心及进取心
2)、手不懒,代码写的足够多,熟能生巧
3)、有一定的学习能力能定位到问题,善于自学善于自己解决问题
4)、能够独立写一些简单的项目
所以正确的学习心态一定是把关注点放到学习这件事本身,你要学会这些知识,这些内容,这些技术,这是需要一天一天逐渐积累起来的,并不是短时间就可以达到什么结果。
敲黑板:如果你对于学习没什么耐心,没什么兴趣,我劝你不要来学习编程,学习编程绝对是一个耐心的活,也是需要不断学习和充电的行业。或者说已经到了信息时代,不爱学习的人,很难有耐心去学习知识的人,在信息时代是混不下去的,任何行业都是如此,不学习不进步不紧贴时代的人就一定被各行业淘汰。
6 你可能需要的面试技巧
-
这个自我介绍你肯定至少要准备两分钟,我叫什么学历是什么,学校是什么,熟悉技术要分层次介绍出来,对多线程或者锁有深入理解,就是一定要突出自己。面试官就会根据你熟悉自然就会进入你问我答的环节,这部分呢,要把面试官问的问题听清楚,如果一时没有思路可以给你一分钟进行思考,千万不要答非所问或者是抢答这样对你后面面试是不利的哈,然后说我的回答完毕这样感觉你沟通能力还行,在项目里面你遇到问题最多是啥你又是咋解决的这是非常重要。
-
首先简历应该应该给它精简成一页,这个把你华为社区的博客二维码放上去能表示你日积月累的记录,每个面试官包括老总都会看你博客,这样能全面了解你是怎么解决技术的,你就会在竞争者脱颖而出。
🍉 写在最后
-
本文整理自华为云社区【内容共创】活动第12期。
-
任务 12:Java 学习应用及就业之道
- 点赞
- 收藏
- 关注作者
评论(0)