【Kubernetes】k8s的安全管理详细说明【role赋权和clusterrole赋权详细配置说明】

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

kind: Role

metadata:

creationTimestamp: null

name: role1

rules:

  • apiGroups:

  • “”

resources:

  • pods

  • nodes

verbs:

  • get

  • list

  • create

[root@master sefe]#

  • 生成role

后面修改后可以直接生成就会覆盖之前的权限了,不用删除了再生成。

[root@master ~]# kubectl apply -f role1.yaml

role.rbac.authorization.k8s.io/role1 created

[root@master ~]#

[root@master ~]# kubectl get role

NAME CREATED AT

role1 2021-11-05T07:34:45Z

[root@master ~]#

  • 查看详细

可以看到这个role已有权限

[root@master sefe]# kubectl describe role role1

Name: role1

Labels:

Annotations:

PolicyRule:

Resources Non-Resource URLs Resource Names Verbs


jobs [] [] [get list create]

nodes [] [] [get list create]

pods [] [] [get list create]

[root@master sefe]#

创建rolebinding【绑定用户】
  • 注意,用户是不属于任何命名空间的

  • 创建rolebinding需要先创建一个role和对应的用户名哦

#下面中rdind1是自定义的名称

–role=指定一个role

#user=为哪个用户授权

[root@master ~]# kubectl create rolebinding rbind1 --role=role1 --user=ccx

rolebinding.rbac.authorization.k8s.io/rbind1 created

[root@master ~]#

[root@master ~]# kubectl get rolebindings.rbac.authorization.k8s.io

NAME ROLE AGE

rbind1 Role/role1 5s

[root@master ~]#

[root@master sefe]# kubectl describe rolebindings.rbac.authorization.k8s.io rbind1

Name: rbind1

Labels:

Annotations:

Role:

Kind: Role

Name: role1

Subjects:

Kind Name Namespace


User ccx

[root@master sefe]#

  • 创建ServiceAccount和Role的绑定

我上面是用命令的形式实现的嘛,这是我在网上看到的其他资料,是用文件的形式实现,感兴趣的小伙伴可以用这种方法一试。。。。

[root@app01 k8s-user]# vim role-bind-minio-service-minio.yaml

kind: RoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

#namespace: minio

name: role-bind-minio-service-monio #自定义名称

subjects:

  • kind: ServiceAccount

#namespace: minio

name: username # 为哪个用户授权

roleRef:

kind: Role

角色名称

name: rolename#role的名称

apiGroup: rbac.authorization.k8s.io

[root@app01 k8s-user]# kubectl apply -f role-bind-minio-service-minio.yaml

rolebinding.rbac.authorization.k8s.io/role-bind-minio-service-monio created

[root@app01 k8s-user]# kubectl get rolebinding -n minio -owide

NAME AGE ROLE USERS GROUPS SERVICEACCOUNTS

role-bind-minio-service-monio 29s Role/role-minio-service-minio minio/service-minio

[root@app01 k8s-user]#

测试
  • 注意,我上面已经授权了ccx用户和配置文件【看kubeconfig验证中的操作流程】,所以我这直接用一个集群外的主机来做测试【注意,这个集群ip我在kubeconfig验证中已经做好所有配置了,所以我可以直接使用】

  • 查询测试

上面我们已经对ccx用户授权pod权限了,可是直接使用会发现依然报错

[root@master2 ~]# kubectl --kubeconfig=kc1 get pods

Error from server (Forbidden): pods is forbidden: User “ccx” cannot list resource “pods” in API group “” in the namespace “default”

#是因为前面说明role是对命名空间生效的【上面我们在safe命名空间】

#所以我们需要指定命名空间

[root@master2 ~]# kubectl --kubeconfig=kc1 get pods -n safe

No resources found in safe namespace.

[root@master2 ~]#

当然,只要有这个kc1配置文件的,在哪执行都行【当前在集群master上】

[root@master sefe]# ls

ca.crt ccx.crt ccx.csr ccx.key csr.yaml kc1 role1.yaml

[root@master sefe]# kubectl --kubeconfig=kc1 get pods -n safe

No resources found in safe namespace.

[root@master sefe]#

  • 创建pod测试

为了更能方便看出这个效果,所以我还在集群外的主机上操作吧。

#拷贝一个pod文件

[root@master sefe]# scp …/pod1.yaml 192.168.59.151:~

root@192.168.59.151’s password:

pod1.yaml 100% 431 424.6KB/s 00:00

[root@master sefe]#

回到测试机上创建一个pod,是可以正常创建成功的

[root@master2 ~]# kubectl --kubeconfig=kc1 get nodes -n safe

^[[AError from server (Forbidden): nodes is forbidden: User “ccx” cannot list resource “nodes” in API group “” at the cluster scope

[root@master2 ~]# kubectl --kubeconfig=kc1 get pods -n safe

No resources found in safe namespace.

[root@master2 ~]#

[root@master2 ~]# export KUBECONFIG=kc1

[root@master2 ~]#

[root@master2 ~]# kubectl apply -f pod1.yaml -n safe

pod/pod1 created

[root@master2 ~]#

[root@master2 ~]# kubectl get pods -n safe

NAME READY STATUS RESTARTS AGE

pod1 1/1 Running 0 8s

[root@master2 ~]#

如果不指定命名空间的话就是创建在本地了,但是本地是没有镜像的,所以状态会一直为pending

[root@master2 ~]# kubectl apply -f pod1.yaml

pod/pod1 created

[root@master2 ~]# kubectl get pods

NAME READY STATUS RESTARTS AGE

pod1 0/1 Pending 0 3s

[root@master2 ~]#

现在回到集群master上,可以看到这个pod被创建成功的

[root@master sefe]# kubectl get pods

NAME READY STATUS RESTARTS AGE

pod1 1/1 Running 0 32s

[root@master sefe]#

  • 删除pod测试

是删除不了的哈,因为这个没有给delete权限

[root@master2 ~]# kubectl delete -f pod1.yaml -n safe

Error from server (Forbidden): error when deleting “pod1.yaml”: pods “pod1” is forbidden: User “ccx” cannot delete resource “pods” in API group “” in the namespace “safe”

[root@master2 ~]#

没关系呀,我们去给delete权限就是了

#集群master节点

[root@master sefe]# cat role1.yaml

apiVersion: rbac.authorization.k8s.io/v1

kind: Role

metadata:

creationTimestamp: null

name: role1

rules:

  • apiGroups:

  • “”

resources:

  • nodes

  • pods

  • jobs

verbs:

  • get

  • list

  • create

  • delete

[root@master sefe]# kubectl apply -f role1.yaml

role.rbac.authorization.k8s.io/role1 configured

[root@master sefe]#

#测试节点

[root@master2 ~]# kubectl delete -f pod1.yaml -n safe

pod “pod1” deleted

[root@master2 ~]#

[root@master2 ~]# kubectl get pods -n safe

No resources found in safe namespace.

[root@master2 ~]#

Error from server (Forbidden)报错处理
  • 报错内容如下

[root@master2 ~]# kubectl --kubeconfig=kc1 get pods -n safe

Error from server (Forbidden): pods is forbidden: User “ccx” cannot list resource “pods” in API group “” in the namespace “safe”

[root@master2 ~]#

  • 之前问讲师

可能讲师也很懵吧,一直没给我解答,最后自己琢磨出来了

在这里插入图片描述

在这里插入图片描述

  • 这种情况并不是role的配置文件问题,而是因为kc1中ccx这个用户的授权出问题了,至于排查方法,去看kubeconfig配置那篇文章,从开始一步步跟着排查【重点看csr和授权这样子】

在这里插入图片描述

  • 总结:上面config授权好像和这没关系,如果用之前授权的方式给用户授权的话,好像role并没有生效了【本来role就是授权用的,上面的方式直接给了admin权限了,覆盖role了 】,所以,我上面的处理方法好像是错的,但是讲师也没有纠正我,所以,讲师也并没有很负责吧,几千块钱的培训费花的感觉并不值得,反正role这个问题,如果遇到部分权限能用,部分不能用,还是排查role相关的知识吧,我上面这个办法还是别采取了【所以,role着知识我觉得上面配置流程是没有错的,可能是我集群环境试验太多东西,啥配置被我搞乱罢了,后面有时间打新集群了再回过头来重新做一遍role相关的试验吧】
role的resources分开赋权
  • 其实apiGroups是一个独立模块,一个apiGroups定义一个功能,所以如果我们想对不同的组建定义不同的功能,我们就可以添加足够多的apiGroups分开写就是了

  • 比如现在我们想对pod和deployment分开赋权,那么我们就可以像下面这么写【用2个apiGroups即可】

像这种写法就可以创建deployment和管理副本数了。

[root@master sefe]# cat role2.yaml

apiVersion: rbac.authorization.k8s.io/v1

kind: Role

metadata:

creationTimestamp: null

name: role1

rules:

  • apiGroups:

  • “”

resources:

  • pods

verbs:

  • get

  • list

  • create

  • delete

  • apiGroups:

  • “apps”

resources:

  • deployments

  • deployments/scale

verbs:

  • get

  • list

  • create

  • delete

  • patch

[root@master sefe]#

  • role的使用到此就完了,后面可以多测试哦

现在我们删除这2样,后面进行ClusterRole的测试吧

[root@master sefe]# kubectl delete -f role1.yaml

role.rbac.authorization.k8s.io “role1” deleted

[root@master sefe]# kubectl delete rolebindings.rbac.authorization.k8s.io rbind1

rolebinding.rbac.authorization.k8s.io “rbind1” deleted

[root@master sefe]#

clusterrole测试说明

创建一个clusterrole
  • 除了我下面的方法外,还可以使用这种方式

kind: ClusterRole

apiVersion: rbac.authorization.k8s.io/v1

metadata:

鉴于ClusterRole是集群范围对象,所以这里不需要定义"namespace"字段

角色名称

name: cluster-role-paas-basic-service-minio

控制 dashboard 中 命名空间模块 中的面板是否有权限查看

rules:

  • apiGroups: [“rbac.authorization.k8s.io”,“”] # 空字符串""表明使用core API group

#resources: [“pods”,“pods/log”,“pods/exec”, “pods/attach”, “pods/status”, “events”, “replicationcontrollers”, “services”, “configmaps”, “persistentvolumeclaims”]

resources: [“pods”,“pods/log”,“pods/exec”, “pods/attach”, “pods/status”,“services”]

verbs: [“get”, “watch”, “list”, “create”, “update”, “patch”, “delete”]

  • apiGroups: [ “apps”]

resources: [“namespaces”,“deployments”, “daemonsets”, “statefulsets”]

verbs: [“get”, “list”, “watch”]

  • 注:这个其实好role是一样的配置方法,唯一区别就是,yaml文件中kind的Role需要改为ClusterRole

  • 生成clusterrole的配置文件

我们可以直接通过这种方式生成yaml文件,后面如果需要做啥操作的话,直接对yaml文件操作就行了

下面生成的yaml中,参数需要修改的,看上面ClusterRole参数值说明,上面中有可选参数的详细说明。

[root@master sefe]# kubectl create clusterrole crole1 --verb=get,create,delete --resource=deploy,pod,svc --dry-run=client -o yaml > crole1.yaml

[root@master sefe]# cat crole1.yaml

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

creationTimestamp: null

name: crole1

rules:

  • apiGroups:

  • “”

resources:

  • pods

  • services

verbs:

  • get

  • create

  • delete

  • apiGroups:

  • apps

resources:

  • deployments

verbs:

  • get

  • create

  • delete

[root@master sefe]#

  • 生成role

后面修改后可以直接生成就会覆盖之前的权限了,不用删除了再生成。

[root@master sefe]# kubectl apply -f crole1.yaml

clusterrole.rbac.authorization.k8s.io/crole1 created

[root@master sefe]#

[root@master sefe]# kubectl get clusterrole crole1

NAME CREATED AT

crole1 2021-11-05T10:09:04Z

[root@master sefe]#

  • 查看详细

[root@master sefe]# kubectl describe clusterrole crole1

Name: crole1

Labels:

Annotations:

PolicyRule:

Resources Non-Resource URLs Resource Names Verbs


pods [] [] [get create delete]

services [] [] [get create delete]

deployments.apps [] [] [get create delete]

创建cluserrolebinding【绑定用户】
  • 注意,这是所有命名空间都生效的

  • 创建cluserrolebinding需要先创建一个role和对应的用户名哦

#下面中rdind1是自定义的名称

–role=指定一个role

#user=为哪个用户授权

[root@master ~]#

[root@master sefe]# kubectl create clusterrolebinding cbind1 --clusterrole=crole1 --user=ccx

clusterrolebinding.rbac.authorization.k8s.io/cbind1 created

[root@master sefe]#

[root@master sefe]# kubectl get clusterrolebindings.rbac.authorization.k8s.io cbind1

NAME ROLE AGE

cbind1 ClusterRole/crole1 16s

[root@master sefe]#

前面说过,这是对所有命名空间都生效的,所以我们随便查看几个命名都会发现有这个cluser的存在

[root@master sefe]# kubectl get clusterrolebindings.rbac.authorization.k8s.io -n default cbind1

NAME ROLE AGE

cbind1 ClusterRole/crole1 28s

[root@master sefe]#

[root@master sefe]# kubectl get clusterrolebindings.rbac.authorization.k8s.io -n ds cbind1

NAME ROLE AGE

cbind1 ClusterRole/crole1 35s

[root@master sefe]#

  • 查看详情

[root@master sefe]# kubectl describe clusterrolebindings.rbac.authorization.k8s.io cbind1

Name: cbind1

Labels:

Annotations:

Role:

Kind: ClusterRole

Name: crole1

Subjects:

Kind Name Namespace


User ccx

[root@master sefe]#

  • 除了上面定义的clusterrole以外,也可以直接给amdin的权限给这个用户

[root@master sefe]# kubectl create clusterrolebinding cbind2 --clusterrole=cluster-admin --user=ccx

clusterrolebinding.rbac.authorization.k8s.io/cbind2 created

[root@master sefe]#

[root@master sefe]# kubectl get clusterrolebindings.rbac.authorization.k8s.io cbind2

NAME ROLE AGE

cbind2 ClusterRole/cluster-admin 23s

[root@master sefe]# kubectl describe clusterrolebindings.rbac.authorization.k8s.io cbind2

Name: cbind2

Labels:

Annotations:

Role:

Kind: ClusterRole

Name: cluster-admin

Subjects:

Kind Name Namespace


User ccx

[root@master sefe]#

  • 创建ServiceAccount和ClusterRole的绑定

我上面是用命令的形式实现的嘛,这是我在网上看到的其他资料,是用文件的形式实现,感兴趣的小伙伴可以用这种方法一试。。。。

[root@app01 k8s-user]# vim cluster-role-bind-paas-basic-service-minio.yaml

kind: RoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: cluster-role-bind-paas-basic-service-monio #自定义名称

subjects:

  • kind: ServiceAccount

namespace: minio

name: username# 为哪个用户授权

roleRef:

kind: ClusterRole

角色名称

name: cluster-role#clusterrole的名称

apiGroup: rbac.authorization.k8s.io

[root@app01 k8s-user]# kubectl apply -f cluster-role-bind-paas-basic-service-minio.yaml

rolebinding.rbac.authorization.k8s.io/cluster-role-bind-paas-basic-service-monio created

测试

集群内的机器可以正常访问

[root@master sefe]# kubectl --kubeconfig=kc1 get pod -n default

NAME READY STATUS RESTARTS AGE

recycler-for-pv-nfs2 0/1 ImagePullBackOff 0 75d

[root@master sefe]# kubectl --kubeconfig=kc1 get pod -n ccx

NAME READY STATUS RESTARTS AGE

centos-7846bf67c6-gj7v4 0/1 ImagePullBackOff 0 121d

nginx-test-795d659f45-6f8t9 0/1 ImagePullBackOff 0 121d

nginx-test-795d659f45-7bbmt 0/1 ImagePullBackOff 0 121d

pod1-node2 1/1 Running 8 101d

[root@master sefe]#

集群外的主机也是可以正常使用该权限的

[root@master2 ~]# kubectl --kubeconfig=kc1 get node -n safe

NAME STATUS ROLES AGE VERSION

master Ready master 117d v1.21.0

node1 Ready 117d v1.21.0

node2 Ready 117d v1.21.0

[root@master2 ~]#

Error from server (Forbidden)报错处理
  • 报错内容如下

[root@master2 ~]# kubectl --kubeconfig=kc1 get pods -n safe

Error from server (Forbidden): pods is forbidden: User “ccx” cannot list resource “pods” in API group “” in the namespace “safe”

[root@master2 ~]#

  • 之前问讲师

可能讲师也很懵吧,一直没给我解答,最后自己琢磨出来了

在这里插入图片描述

在这里插入图片描述

  • 这种情况并不是role的配置文件问题,而是因为kc1中ccx这个用户的授权出问题了,至于排查方法,去看kubeconfig配置那篇文章,从开始一步步跟着排查【重点看csr和授权这样子】

在这里插入图片描述

  • 总结:上面config授权好像和这没关系,如果用之前授权的方式给用户授权的话,好像role并没有生效了【本来role就是授权用的,上面的方式直接给了admin权限了,覆盖role了 】,所以,我上面的处理方法好像是错的,但是讲师也没有纠正我,所以,讲师也并没有很负责吧,几千块钱的培训费花的感觉并不值得,反正role这个问题,如果遇到部分权限能用,部分不能用,还是排查role相关的知识吧,我上面这个办法还是别采取了【所以,role着知识我觉得上面配置流程是没有错的,可能是我集群环境试验太多东西,啥配置被我搞乱罢了,后面有时间打新集群了再回过头来重新做一遍role相关的试验吧】
clusterrole的分开赋权
  • 对pod资源可以删除,进入终端执行命令,其他资源只读权限

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

annotations:

rbac.authorization.kubernetes.io/autoupdate: “true”

creationTimestamp: “2019-10-29T14:21:54Z”

labels:

kubernetes.io/bootstrapping: rbac-defaults

name: uki-view

rules:

  • apiGroups:

  • “”

resources:

  • pods

  • pods/attach

  • pods/exec

  • pods/portforward

  • pods/proxy

verbs:

  • create

  • delete

  • deletecollection

  • patch

  • update

  • apiGroups:

  • “”

resources:

  • configmaps

  • endpoints

  • persistentvolumeclaims

  • pods

  • replicationcontrollers

  • replicationcontrollers/scale

  • serviceaccounts

  • services

  • nodes

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • “”

resources:

  • bindings

  • events

  • limitranges

  • namespaces/status

  • pods/log

  • pods/status

  • replicationcontrollers/status

  • resourcequotas

  • resourcequotas/status

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • “”

resources:

  • namespaces

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • apps

resources:

  • controllerrevisions

  • daemonsets

  • deployments

  • deployments/scale

  • replicasets

  • replicasets/scale

  • statefulsets

  • statefulsets/scale

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • autoscaling

resources:

  • horizontalpodautoscalers

verbs:

  • get

  • list

  • watch

  • patch

  • update

  • apiGroups:

  • extensions

resources:

  • daemonsets

  • deployments

  • deployments/scale

  • ingresses

  • networkpolicies

  • replicasets

  • replicasets/scale

  • replicationcontrollers/scale

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • policy

resources:

  • poddisruptionbudgets

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • networking.k8s.io

resources:

  • networkpolicies

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • networking.k8s.io

resources:

  • ingresses

verbs:

  • get

  • apiGroups:

  • networking.k8s.io

resources:

  • ingresses

verbs:

  • list

  • apiGroups:

  • networking.k8s.io

resources:

  • ingresses

verbs:

  • watch
  • 对集群资源具有增删改查的权限

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRole

metadata:

annotations:

rbac.authorization.kubernetes.io/autoupdate: “true”

creationTimestamp: “2019-10-29T14:21:54Z”

labels:

kubernetes.io/bootstrapping: rbac-defaults

name: uki-namespace-all

rules:

  • apiGroups:

  • “”

resources:

  • pods

  • pods/attach

  • pods/exec

  • pods/portforward

  • pods/proxy

verbs:

  • create

  • delete

  • deletecollection

  • patch

  • update

  • apiGroups:

  • “”

resources:

  • configmaps

  • endpoints

  • persistentvolumeclaims

  • pods

  • replicationcontrollers

  • replicationcontrollers/scale

  • serviceaccounts

  • services

verbs:

  • get

  • list

  • watch

  • create

  • patch

  • delete

  • apiGroups:

  • “”

resources:

  • bindings

  • events

  • limitranges

  • namespaces/status

  • pods/log

  • pods/status

  • replicationcontrollers/status

  • resourcequotas

  • resourcequotas/status

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • “”

resources:

  • namespaces

verbs:

  • get

  • list

  • watch

  • apiGroups:

  • apps

resources:

  • controllerrevisions

  • daemonsets

  • deployments

  • deployments/scale

  • replicasets

  • replicasets/scale

  • statefulsets

  • statefulsets/scale

verbs:

  • get

  • list

  • watch

  • create

  • patch

  • delete

  • apiGroups:

  • autoscaling

resources:

  • horizontalpodautoscalers

verbs:

  • get

  • list

  • watch

  • patch

  • update

  • create

  • delete

  • apiGroups:

  • extensions

resources:

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值