前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >k8s实践6:从解决报错开始入门RBAC

k8s实践6:从解决报错开始入门RBAC

原创
作者头像
迅达集团
修改于 2019-03-25 03:21:28
修改于 2019-03-25 03:21:28
4K00
代码可运行
举报
文章被收录于专栏:工作专用1工作专用1
运行总次数:0
代码可运行

2019-03-18 15:00:09

1.

在k8s集群使用过程中,总是遇到各种rbac的权限问题.

记录了几个报错,见下:

报错1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"message": "pods is forbidden: User \"kubernetes\" cannot list resource \"pods\" in API group \"\" at the cluster scope" "message": "pservices is forbidden: User \"kubernetes\" cannot list resource \"pservices\" in API group \"\" at the cluster scope",

报错2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master2 ~]# curl https://192.168.32.127:8443/logs --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "forbidden: User \"kubernetes\" cannot get path \"/logs\"", "reason": "Forbidden", "details": { }, "code": 403
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl https://192.168.32.127:8443/metrics --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "forbidden: User \"kubernetes\" cannot get path \"/metrics\"", "reason": "Forbidden", "details": { }, "code": 403

深入学习了解rbac的各种基础知识,相当必要.

2.

从分析报错开始

报错1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"message": "pods is forbidden: User \"kubernetes\" cannot list resource \"pods\" in API group \"\" at the cluster scope"

先看这条报错的命令记录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 ~]# curl https://192.168.32.127:8443/api/v1/pods --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "pods is forbidden: User \"kubernetes\" cannot list resource \"pods\" in API group \"\" at the cluster scope", "reason": "Forbidden", "details": { "kind": "pods" }, "code": 403

这条报错的意思是什么呢?

字面上理解,用户kubernetes在api Group里没有权限,无法获取资源pod列表.

从解决这个报错开始我们的入门学习.

3.

User kubernetes是从哪冒出来的呢?

这个用户是我们部署apiserver时,生成的api访问etcd的用户.

检索用户kubernetes的权限和绑定的群组,见下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 ~]# kubectl describe clusterrolebindings |grep -B 9 "User kubernetes " Name: discover-base-url Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"name":"discover-base-url","namespace":""},"roleR... Role: Kind: ClusterRole Name: discover_base_url Subjects: Kind Name Namespace ---- ---- --------- User kubernetes -- Name: kube-apiserver Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"name":"kube-apiserver","namespace":""},"roleRef"... Role: Kind: ClusterRole Name: kube-apiserver Subjects: Kind Name Namespace ---- ---- --------- User  kubernetes

权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 ~]# kubectl describe clusterroles discover_base_url Name: discover_base_url Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{"rbac.authorization.kubernetes.io/autoupdate":"true"},"lab... rbac.authorization.kubernetes.io/autoupdate=true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- [/] [] [get] [root@k8s-master1 ~]#

##注意这条权限是上篇apiserver里面新增的权限.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 ~]# kubectl describe clusterroles kube-apiserver Name: kube-apiserver Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"kube-apiserver","namespace":""},"rules":[{"apiGr... PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- nodes/metrics [] [] [get create] nodes/proxy [] [] [get create] [root@k8s-master1 ~]#

##一个用的是Resources

##一个用的是Non-Resource

4.

引出问题1:

Non-Resouce是什么?

google了好久,也只是看到只言片语.以下是我自己的理解:

回头看上篇检索apiserver时显示的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 ~]# curl https://192.168.32.127:8443/ --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "paths": [ "/api", "/api/v1", "/apis", "/apis/", "/apis/admissionregistration.k8s.io", "/apis/admissionregistration.k8s.io/v1beta1", "/apis/apiextensions.k8s.io", "/apis/apiextensions.k8s.io/v1beta1", "/apis/apiregistration.k8s.io", "/apis/apiregistration.k8s.io/v1", "/apis/apiregistration.k8s.io/v1beta1", "/apis/apps", "/apis/apps/v1", "/apis/apps/v1beta1", "/apis/apps/v1beta2", "/apis/authentication.k8s.io", "/apis/authentication.k8s.io/v1", "/apis/authentication.k8s.io/v1beta1", "/apis/authorization.k8s.io", "/apis/authorization.k8s.io/v1", "/apis/authorization.k8s.io/v1beta1", "/apis/autoscaling", "/apis/autoscaling/v1", "/apis/autoscaling/v2beta1", "/apis/autoscaling/v2beta2", "/apis/batch", "/apis/batch/v1", "/apis/batch/v1beta1", "/apis/certificates.k8s.io", "/apis/certificates.k8s.io/v1beta1", "/apis/coordination.k8s.io", "/apis/coordination.k8s.io/v1beta1", "/apis/events.k8s.io", "/apis/events.k8s.io/v1beta1", "/apis/extensions", "/apis/extensions/v1beta1", "/apis/networking.k8s.io", "/apis/networking.k8s.io/v1", "/apis/policy", "/apis/policy/v1beta1", "/apis/rbac.authorization.k8s.io", "/apis/rbac.authorization.k8s.io/v1", "/apis/rbac.authorization.k8s.io/v1beta1", "/apis/scheduling.k8s.io", "/apis/scheduling.k8s.io/v1beta1", "/apis/storage.k8s.io", "/apis/storage.k8s.io/v1", "/apis/storage.k8s.io/v1beta1", "/healthz", "/healthz/autoregister-completion", "/healthz/etcd", "/healthz/log", "/healthz/ping", "/healthz/poststarthook/apiservice-openapi-controller", "/healthz/poststarthook/apiservice-registration-controller", "/healthz/poststarthook/apiservice-status-available-controller", "/healthz/poststarthook/bootstrap-controller", "/healthz/poststarthook/ca-registration", "/healthz/poststarthook/generic-apiserver-start-informers", "/healthz/poststarthook/kube-apiserver-autoregistration", "/healthz/poststarthook/rbac/bootstrap-roles", "/healthz/poststarthook/scheduling/bootstrap-system-priority-classes", "/healthz/poststarthook/start-apiextensions-controllers", "/healthz/poststarthook/start-apiextensions-informers", "/healthz/poststarthook/start-kube-aggregator-informers", "/healthz/poststarthook/start-kube-apiserver-admission-initializer", "/healthz/poststarthook/start-kube-apiserver-informers", "/logs", "/metrics", "/openapi/v2", "/swagger-2.0.0.json", "/swagger-2.0.0.pb-v1", "/swagger-2.0.0.pb-v1.gz", "/swagger-ui/", "/swagger.json", "/swaggerapi", "/version" ] }[root@k8s-master1 ~]#

从healthz开始的都是Non-resouce,是不是呢?修改clusterroles,测试见下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# cat clusterroles1.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults name: discover_base_url rules: - nonResourceURLs: # - / - /healthz/* verbs: - get [root@k8s-master1 roles]#
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# kubectl apply -f clusterroles1.yaml clusterrole.rbac.authorization.k8s.io "discover_base_url" configured [root@k8s-master1 roles]# kubectl apply -f clusterrolebindings1.yaml clusterrolebinding.rbac.authorization.k8s.io "discover-base-url" configured [root@k8s-master1 roles]# [root@k8s-master1 roles]# kubectl describe clusterroles discover_base_url Name: discover_base_url Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{"rbac.authorization.kubernetes.io/autoupdate":"true"},"lab... rbac.authorization.kubernetes.io/autoupdate=true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- [/healthz/*]       [] [get]

##具有Non-Resources /healthz的get权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# curl https://192.168.32.127:8443/logs --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "forbidden: User \"kubernetes\" cannot get path \"/logs\"", "reason": "Forbidden", "details": { }, "code": 403 }[root@k8s-master1 roles]#
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# curl https://192.168.32.127:8443/metrics --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "forbidden: User \"kubernetes\" cannot get path \"/metrics\"", "reason": "Forbidden", "details": { }, "code": 403 }[root@k8s-master1 roles]#

可以看到除了healthz执行成功,其他全部失败.

修改clusterroles,再测试,见下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# kubectl describe clusterroles discover_base_url Name: discover_base_url Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{"rbac.authorization.kubernetes.io/autoupdate":"true"},"lab... rbac.authorization.kubernetes.io/autoupdate=true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- [/healthz/*]       [] [get] [/logs] [] [get] [/metrics] [] [get] [/version] [] [get] [root@k8s-master1 roles]#

再执行上面报错的命令,全部正常.

可见,Non-Resourece包含了/healthz/*,/logs,/metrics等等.

5.

引出问题2:

Resource的权限配置?

先来条执行报错的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]#curl https://192.168.32.127:8443/api/v1/nodes/proxy --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "nodes \"proxy\" is forbidden: User \"kubernetes\" cannot get resource \"nodes\" in API group \"\" at the cluster scope", "reason": "Forbidden", "details": { "name": "proxy", "kind": "nodes" }, "code": 403 }[root@k8s-master1 roles]#

好奇怪,根据我们上面检索的权限,见下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- Name: kube-apiserver Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"name":"kube-apiserver","namespace":""},"roleRef"... Role: Kind: ClusterRole Name: kube-apiserver Subjects: Kind Name Namespace ---- ---- --------- User  kubernetes
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Name: kube-apiserver Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"kube-apiserver","namespace":""},"rules":[{"apiGr... PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- nodes/metrics [] [] [get create] nodes/proxy [] [] [get create] [root@k8s-master1 ~]#

按道理是应该可以正常检索得到的.为什么报错呢?先不管,添加权限测试下看看,见下:

获取kube-apiserver这个clusterroles权限的描述,见下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# kubectl get clusterroles kube-apiserver -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"kube-apiserver","namespace":""},"rules":[{"apiGroups":[""],"resources":["nodes/proxy","nodes/metrics"],"verbs":["get","create"]}]} creationTimestamp: 2019-02-28T06:51:53Z name: kube-apiserver resourceVersion: "35075" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/kube-apiserver uid: 5519ea8d-3b25-11e9-95a3-000c29383c89 rules: - apiGroups: - "" resources: - nodes/proxy - nodes/metrics verbs: - get - create [root@k8s-master1 roles]#

修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# cat clusterroles2.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: kube-apiserver rules: - apiGroups: [""] resources: ["nodes", "nodes/proxy","nodes/metrics"] verbs: ["get", "list","create"] [root@k8s-master1 roles]#
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# kubectl apply -f clusterroles2.yaml clusterrole.rbac.authorization.k8s.io "kube-apiserver" configured [root@k8s-master1 roles]# kubectl get clusterroles kube-apiserver -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"kube-apiserver","namespace":""},"rules":[{"apiGroups":[""],"resources":["nodes","nodes/proxy","nodes/metrics"],"verbs":["get","list","create"]}]} creationTimestamp: 2019-02-28T06:51:53Z name: kube-apiserver   resourceVersion: "476880" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/kube-apiserver uid: 5519ea8d-3b25-11e9-95a3-000c29383c89 rules: - apiGroups: - "" resources: - nodes - nodes/proxy - nodes/metrics verbs: - get - list - create

再执行前面报错的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]# curl https://192.168.32.127:8443/api/v1/nodes/k8s-master1 --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Node", "apiVersion": "v1", "metadata": { "name": "k8s-master1", "selfLink": "/api/v1/nodes/k8s-master1", "uid": "46a353d3-3b07-11e9-95a3-000c29383c89", "resourceVersion": "477158", "creationTimestamp": "2019-02-28T03:16:44Z", "labels": { "beta.kubernetes.io/arch": "amd64", "beta.kubernetes.io/os": "linux", "kubernetes.io/hostname": "k8s-master1" }, "annotations": { "node.alpha.kubernetes.io/ttl": "0", "volumes.kubernetes.io/controller-managed-attach-detach": "true" } }, "spec": { }, "status": { "capacity": { "cpu": "1", "ephemeral-storage": "17394Mi", "hugepages-1Gi": "0", "hugepages-2Mi": "0", "memory": "1867264Ki", "pods": "110" }, "allocatable": { "cpu": "1", "ephemeral-storage": "16415037823", "hugepages-1Gi": "0", "hugepages-2Mi": "0", "memory": "1764864Ki", "pods": "110" }, "conditions": [ { "type": "OutOfDisk", "status": "False", "lastHeartbeatTime": "2019-03-18T06:36:47Z", "lastTransitionTime": "2019-03-13T08:07:21Z", "reason": "KubeletHasSufficientDisk", "message": "kubelet has sufficient disk space available" }, { "type": "MemoryPressure", "status": "False", "lastHeartbeatTime": "2019-03-18T06:36:47Z", "lastTransitionTime": "2019-03-13T08:07:21Z", "reason": "KubeletHasSufficientMemory", "message": "kubelet has sufficient memory available" }, { "type": "DiskPressure", "status": "False", "lastHeartbeatTime": "2019-03-18T06:36:47Z", "lastTransitionTime": "2019-03-13T08:07:21Z", "reason": "KubeletHasNoDiskPressure", "message": "kubelet has no disk pressure" }, { "type": "PIDPressure", "status": "False", "lastHeartbeatTime": "2019-03-18T06:36:47Z", "lastTransitionTime": "2019-02-28T03:16:45Z", "reason": "KubeletHasSufficientPID", "message": "kubelet has sufficient PID available" }, { "type": "Ready", "status": "True", "lastHeartbeatTime": "2019-03-18T06:36:47Z", "lastTransitionTime": "2019-03-13T08:07:31Z", "reason": "KubeletReady", "message": "kubelet is posting ready status" } ], "addresses": [ { "type": "InternalIP", "address": "192.168.32.128" }, { "type": "Hostname", "address": "k8s-master1" } ], "daemonEndpoints": { "kubeletEndpoint": { "Port": 10250 } }, "nodeInfo": { "machineID": "d1471d605c074c43bf44cd5581364aea", "systemUUID": "84F64D56-0428-2BBD-7F9E-26CE9C1D7023", "bootID": "c49804b6-0645-49d3-902f-e66b74fed805", "kernelVersion": "3.10.0-514.el7.x86_64", "osImage": "CentOS Linux 7 (Core)", "containerRuntimeVersion": "docker://17.3.1", "kubeletVersion": "v1.12.3", "kubeProxyVersion": "v1.12.3", "operatingSystem": "linux", "architecture": "amd64" }, "images": [ { "names": [ "registry.access.redhat.com/rhel7/pod-infrastructure@sha256:92d43c37297da3ab187fc2b9e9ebfb243c1110d446c783ae1b989088495db931", "registry.access.redhat.com/rhel7/pod-infrastructure:latest" ], "sizeBytes": 208612920 }, { "names": [ "tutum/dnsutils@sha256:d2244ad47219529f1003bd1513f5c99e71655353a3a63624ea9cb19f8393d5fe", "tutum/dnsutils:latest" ], "sizeBytes": 199896828 }, { "names": [ "httpd@sha256:5e7992fcdaa214d5e88c4dfde274befe60d5d5b232717862856012bf5ce31086" ], "sizeBytes": 131692150 }, { "names": [ "httpd@sha256:20ead958907f15b638177071afea60faa61d2b6747c216027b8679b5fa58794b", "httpd@sha256:e76e7e1d4d853249e9460577d335154877452937c303ba5abde69785e65723f2", "httpd:latest" ], "sizeBytes": 131679770 } ] } }[root@k8s-master1 roles]#

整个node的数据都读取出来了.

6.

接上面问题的思考,先对比下,修改前和修改后权限的对比,见下:

修改前:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: - apiGroups: - "" resources: - nodes/proxy - nodes/metrics verbs: - get - create

修改后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: - apiGroups: - "" resources: - nodes - nodes/proxy - nodes/metrics verbs: - get - list - create

修改的就是resources加上了nodes这个资源.其他pods,svc之类的权限,参考这个权限修改就能够实现访问.

我的理解是:只有具有了访问这个资源的权限之后,才能够访问它的子资源.

7.

遗留问题

还遇到个报错,见下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s-master1 roles]#curl https://192.168.32.127:8443/api/v1/nodes/proxy --cacert /etc/kubernetes/cert/ca.pem --cert /etc/kubernetes/cert/kubernetes.pem --key /etc/kubernetes/cert/kubernetes-key.pem { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "nodes \"proxy\" not found", "reason": "NotFound", "details": { "name": "proxy", "kind": "nodes" }, "code": 404 }[root@k8s-master1 roles]#

这是子资源没有生成的问题.后面再来测试.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
从零基础到拿到网易Java实习offer,谈谈我的学习经验
作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验、求职心得和成长感悟,以及作为程序员的思考和见解。
程序员黄小斜
2019/03/13
1.2K0
改了 3 年的技术简历,终于能让面试官看顺眼了
  怎样制作一份优秀的技术简历。相信很多同学都对此有疑问,实际上,制作简历这件事,说难也不难,说简单也不简单。
程序员黄小斜
2019/03/30
2.2K0
这里有20位程序员关于求职的疑惑,还好也有参考答案
前几天发了一条朋友圈对于求职小伙伴们提出的问题,我进行了收集整理,统一反馈。也许这20个问题也是你们遇到的问题,所以趁着年前赶紧把它发出来。
程序员黄小斜
2019/03/14
5540
当面试官说 “你还有什么问题想问的” ,你该如何回答?
程序员面试时经常会听到面试官说一些套话,比如“今天的面试就到这里了,回去等通知吧”,“你还有什么问题想问我的吗”,“如果这道题不会做,那么我们也可以换一道”
程序员黄小斜
2019/03/30
1.3K0
怎么一口气拿到百度,阿里,腾讯,今日头条,网易,华为Offer
在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
用户1093975
2018/12/05
2.8K0
Java工程师修炼之路(从小白到BAT的两年学习历程)
在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
程序员黄小斜
2019/03/11
2.9K0
春招伪产品面经
本人背景: 科班出身,之前受家庭观念影响一直投身科研,但是自身一直并不喜欢,后经女票点醒,毅然决定转向产品,这里分享一下我在简历上0产品经验的情况下如何找产品的经历  前期准备: 前期准备非常重要,我3月份打算转之后,由于比较急躁,马不停蹄的去参加了腾讯的提前批和网易游戏的面试,结果都在群面就挂了…… 群面的经验后面再提,这里主要需要提一下,产品可能没有太多硬技能要求,但是软实力要求特别高,如果你没有真的去了解产品类的工作,没有足够的相关思考,那面试时你现场应变的时候,是很难把问题想全面想深入的,产品
牛客网
2018/05/30
5130
记一次面试腾讯的奇葩经历
大概是一周之后,我的电话响起,号码来自腾讯,于是我接起电话,电话那头果然是另一个部门的面试官,这个部门是负责做腾讯游戏的一些数据仓库的,也就是我比较感兴趣的数据部门。面试官大概介绍了一下部门情况,又和我约了面试时间,于是乎我又重新得到了一次面试机会。
程序员黄小斜
2019/03/30
4K0
​侃一侃我眼里的校招 | 干货
校招 也就是“校园招聘”的简称,对比于“社招(社会招聘)”。通常是针对于当届毕业生 (2021年毕业,校招从2020年秋就开始啦) 举办的招聘渠道,相比于社招而言,校招没有对于工作年限的要求,而且门槛也会较低一些。
做棵大树
2022/09/27
5670
​侃一侃我眼里的校招 | 干货
非CS专业小硕的机器学习/数据挖掘岗位秋招经验
秋招已经告一段落,刚刚签了三方。终于静下心来,有机会可以分享一下我的求职经历了。 教育背景:非CS专业小硕。 求职方向:机器学习/数据挖掘。 最终签约:百度-北京-自动驾驶事业部-数据挖掘/机器学习。 下面分别从我的求职经历、我的求职建议两方面来讲,对经历不感兴趣的可以直接跳到后面哈。 -------------分割线------------ 一、我的求职经历 1.方向确定 说到我的求职方向,因为实验室做的东西主要是建模和优化,所以求职主要想找运筹优化相关的。但是招这方面的公司实在比较少,所以在找实习的时候
牛客网
2018/07/05
5330
错过了春招,难道你还不为秋招做准备吗
如今的校招,像一场突围赛,很多人“牺牲”在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧。
技术zhai
2019/02/15
7380
关于春招 & 秋招面试的一些经验
周末了,就不写技术了,来聊聊关于春招/秋招面试的事情,刚好最近也是逐渐开始春招找实习或者找工作的时候了,我就介绍一些当初准备春招实习和秋招工作面试的一些经验吧,主要是算法工程师岗位的经验,但其实除了在面试的知识准备部分有所区别,对所有技术岗位都是适用的。
kbsc13
2019/08/16
7960
从面试连跪到收割offer,回顾我的春招面试历程(研发岗位)
作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验、求职心得和成长感悟,以及作为程序员的思考和见解。
程序员黄小斜
2019/03/13
1.4K0
【春招必看】一位老学长的真实互联网校招求职心路历程~
【春招必看】一位老学长的真实互联网校招求职心路历程~ 作者:源氏月尊神 链接:https://www.nowcoder.com/discuss/154934?type=2&order=3&pos=1
牛客网
2019/04/25
9010
肝了一天,帅地今天一定把春秋招讲清楚+贡献自己整理的资料
对于日后需要找工作的同学来说,春招/秋招可以说是学生生涯中非常重要的一战,但是我发现很多人却对春秋招的了解甚少,有些人甚至以为是毕业之后再开始找工作,进而导致了找工作的最佳时间段。
帅地
2020/07/09
6790
京东Star和阿里星,揭示互联网企业对算法&机器学习岗的要求
从2015年8月到2015年10月,花了3个月时间找工作,先后通过内推参加了美团、阿里蚂蚁金服、京东、腾讯、今日头条、Growing IO、微软这7个公司的面试,同时参加了网易游戏、LinkedI In中国这2个公司的笔试,拿到比较优质的offer是京东Star和阿里星2个Offer。应聘的岗位要么是算法工程师,要么是机器学习与数据挖掘岗,企业叫法不同,工作实质都是利用机器学习与特征工程去解决业务问题。整个求职过程是一个和互联网企业双向了解,接收面试反馈后不断思考、调整职业规划与重复完善知识体系的过程,本文
机器学习AI算法工程
2018/03/14
3.3K0
非科班学弟如何转行斩获 ATM 大厂的 Offer ?
下面这篇文章来自 zz 学弟,作为非CS专业的选手,分享自己转行互联网,参与校招、斩获大厂 Offer 的经验。全篇干货满满,希望能给大家带来收获。
灵魂画师牧码
2020/11/06
6340
如何找一份好工作?一步一步进入腾讯等大厂
这一个时间表是全文最重要的内容,后面的你可以不记住,但是在校找工作的几个时间节点一定要了解清楚。
杨灿就是杨火山
2022/09/28
8423
如何找一份好工作?一步一步进入腾讯等大厂
嵌入式求职分享(全网最全)
本文会分享一些嵌入式软件岗位的秋招事宜,对所有流程都会有一个描述,事无巨细,希望可以帮到各位读者。
Jasonangel
2021/07/07
2.2K0
从Java小白到收获BAT等offer,分享我这两年的经验和感悟
常想,人生最有趣莫过于前路未知。于是我常常羡慕那些个“金梁古温”笔下随遇而安、随性而为、随缘而爱的浪子们。比如陆小凤,比如叶开。
猿天地
2019/05/15
6780
从Java小白到收获BAT等offer,分享我这两年的经验和感悟
推荐阅读
相关推荐
从零基础到拿到网易Java实习offer,谈谈我的学习经验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档