0

浅谈入行Qt桌面端开发程序员-从毕业到上岗(1):当我们说到桌面端开发时,我们在谈论...

 1 year ago
source link: https://www.cnblogs.com/Leventure/p/16990701.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

谈谈我自己

大家好,我是轩先生,是一个刚入行的Qt桌面端开发程序员。我的本科是双非一本的数学专业,22年毕业,只是部分课程与计算机之间有所交叉,其实在我毕业的时候并没有想过会成为一名程序员,也没有想过会成为一名桌面端开发的程序员。我记得大学的时候我最想去做的事是做一名记者,大学呢也在学校校报的通讯社做了三年的记者兼版面编辑,后来还当了副社长,当然了记者的工资和程序员的工资肯定是没法比哈,而且我的本科专业也比较偏理科,投了几家报社和几家软件公司,拿到offer比较了一下之后就来到了现在这家公司哈。所以可以说我目前的工作是我之前完全没有准备过的。
我来到这个部门的时候正好遇到整个项目要从c#到Qt转型,所以我是先学了C#,再学的Qt,这两个语言之间花了一段时间去转换,也从中了解到很多不同语言之间的异同,之后有空我会简单聊聊C#和Qt。
这篇文章我想简单谈谈关于应届生想做Qt桌面端的一些就业问题,以及就业之后如何从实习到转正,算是记录一点我的心路历程,将来如果有新同事想了解一下学习路线,我也会把这篇文章或者将来会拍一期视频,给他们看看。

一、关于就业

就业问题想必是大部分看到这篇博客的同学会关注到的。前几年是什么情况我不太清楚,就目前来说岗位少人多貌似已经是常态了,但不同的是C++仍然招人比较困难。我听说的是Java岗很多都投爆了,但是我们组现在还招不到C++的...

其实我对就业是没有什么建议的,网上有很多什么背八股文、刷算法试题的攻略了,但是我现在作为一个从业人员的建议是:C++面试这块,不要太过于纠结于八股文和算法,因为技术面不一定会问,即使你过了一面,二面也不好过。但不是要你完全不去了解,而是在了解的基础上,更多的是去实践,因为开发不是做题,不是你题做的好,代码就写得好的。
就我主管这个月面的一些人来说,八股文一个背的比一个溜,结果一些实际场景问起来,连最基础的进程间通信和跨线程同步这样的问题都完全答不上来,或者最简单的如何判断char类型的字符是英文、是数字、是中文,都不说具体方法了,连提供思路也提供不了。这是非常糟糕的,说明你一点基础的开发经验都没有,而现在就业市场作为买方市场,企业或者主管更多的愿意去招一些不用培训就可以上岗的新人,退而求其次才会去看别的。你算法玩的再溜,也不是所有的企业的所有位置需要你那么懂算法,甚至比起算法,你懂怎么跨进程通信甚至都更重要。
四大件,四大件,四大件。数据结构与算法,计算机网络,操作系统,计算机组成原理,这四大件才是最重要的,如果你想要进一步提升,还有一个设计模式也是非常重要的。
我这里可以列一个我主管面试硕士的面试题,你可以看一下自己能答出多少,反正当时面了三四个硕士,有的人支支吾吾地一个都没答出来。题目其实很简单,但是如果你只是停留在算法层面,不借助百度,当场能流利地答出来,那也算不错了。
注:以下题目都是在纯c++语境下进行的,记得很模糊,不一定就是对的,我也是边摸🐟边记的
1.怎么判断字符串是汉字还是英文?退而求其次,怎么判断字符串是不是数字?
2.bmp文件的头信息是什么样的?不用说全,说个大概就行(背景是面试的人说自己有图像处理的研究经历)
3.如何判断线程的同步状态?如何使不同线程同步执行?
4.一个线程如何获取另一个线程的数据?假设有一个监听数据的线程,我现在希望这个数据能显示在界面上,我该如何跨线程保证数据的显示安全呢?
5.了解过GDI吗?界面绘制这一块了解过吗?怎么通过GDI+在界面上画一条线?
6.有一个txt格式的文件,我该如何得知这个文件是什么编码格式?
7.知道什么是Unicode什么是UTF8什么是GBK格式吗?他们有什么区别?为什么要这么多编码格式,是为了解决什么问题有了解过吗?
8.Windows消息机制了解过吗?知道有哪些进程间通信的类型?
9.搭建过webrtc的项目吗?(背景是对方说自己有音视频处理的科研经历),跑得起来吗?音频数据有了解过结构吗?搭建过流媒体服务器吗?
10.nodejs怎么调试?比如写了一些脚本,用什么工具来调试nodejs?vscode了解过吗?
11.数据库了解过吗?怎么创建一个存储过程?
...
还有很多问题,这里就不一一写上了。总之我说这么多,是希望找工作的同学们知道一点:公司看重的是工程应用的能力,不是你做题的能力。
另外我要提一点,如果你是科班出身,就不要写计算机二级证书了,真的有点掉价。

二、桌面端开发具体是做什么?要学习什么?

其实桌面端开发,我个人觉得和前后端没什么区别,甚至和前端没什么区别,特别是在qt中,你甚至还可以用qml去实现界面。但是也有不同,就你在做桌面端开发的时候,更多的时候其实是像一个全栈:又要管前面又要管后面。虽然大部分时间后端的功能都是通过提供的第三方库实现,但是还是有很多功能和数据都是你自己内部去处理的。或者作为刚入门的开发者,你可以这么理解,Qt只是一个界面库,至于那么多乱七八糟的类库只是为了让你更好地连接你的c++后台和他的界面。

我们要学习什么:

1.界面:
首先我们开发一个桌面端程序,最重要的肯定是界面。界面上而言,最重要的肯定是用什么写。Qt其实提供了很多比起MFC那种把窗体当成一个个指针更好的方法(其实我没用过MFC...),比如QSS,QML,开发界面省事这两个肯定是要学的。
除此之外还有就是如何自己开发自定义组件,除了Qt自带的组件,怎么把一些组件拼在一起成为一个新的组件供你差遣?比如我一个列表

image

中间这个内容肯定是经常增减的,所以不可能每次都单独写,肯定是一个独立的控件,这样的自定义控件该如何开发?

2.进程间通信
作为一个新人,你开发的程序大概率是一个独立的进程,而且是一个大进程的一个小模块。那么Windows的几个基本的进程间通信的模型得搞搞清楚。比较常见的是Windows的消息机制,当然也可能有COM组件形式,DBUS模式,内存共享形式等等都有可能,这个不同项目组形式不同,但是一般情况下都是Windows消息机制用的最多,稍微要了解一下。

3.线程同步相关
当你稍微进阶了一点之后,可能就要开始调用第三方的exe或者dll,这个时候就会可能要调用dll提供的回调函数了,这个回调函数中传来的事件极大可能就是跨线程的。跨线程带来的问题有很多,Qt中跨线程控制ui是有可能导致崩溃的,要怎么处理这个跨线程的信号量。有时候可能你自己要把一些费时操作丢到别的线程,这些事情该怎么操作?这也是一个问题。

4.网络通信相关
你开发的软件产品面对的用户群体不同,可能就要接触不同的网络协议。如果你是局域网内通信(比如我),那一些本地常用的TCP,UDP通信至少要懂,还有一些不同应用场景的,比如可靠的广播协议UDT,Quic这类的协议,也要稍微了解一下。不一定要知道原理,知道怎么工程应用就行。

5.学会看官方文档。
Qt在国内的资料和讨论并不多(其实国外也不能算多...)但是比较好的一点是Qt的官方文档是写的比较简单好懂的,去翻一下就能知道这个类是怎么用的,有哪些方法、参数、依赖等等。最好看英文的,貌似有个Qt的中文文档,但是内容比较有限,而且很久没有人维护了。

6.学会用VS+Qt
VS,世界上最好的编译器,不接受反驳

7.有一个好的代码习惯
C++ 风格指南 - 内容目录 其实我觉得这个才应该放在第一个...但是作为学习阶段嘛,可以先把重要的工作任务摆在前面。
一个好的代码规范不仅可以让你的代码的可读性 提升好几个档次,还能让你能更好地写出流畅的代码。我觉得这篇文章真的每一个程序员都要看,特别是那种老的MFC c++命名规范,我真的看一眼我就要死了。

8.学会没事就按ctrl + s保存
这个血的教训,我反正没事就按一下,代码不像剪辑,保存一下不会卡的。

9.善用ctrl+c ctrl+f ctrl+v连招
很帅好吗!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK