讨论5:一个B/S高手的困惑

讨论5:一个B/S高手的困惑
 
 
        前几天,收到一封来自B/S开发高手的来信,其内容如下:
博主你好:
 
        博客文章非常好,我也是有些许疑惑,一直在缠绕着自己, 我也做开发3年多了从Asp做到Jsp【ssh 多种组合】再到现在的PHP【自己也写了个公司架构】,现在是个teamleader  项目架构也从简单的虚拟主机、单独服务器、均衡负载等等。开发方面一直在这么做下去。
        可我一直认为,如果纯做这种BS架构的东西,我一直没有对程序入门!
        此入门或许你应该能理解到bs 的  和 cs 的区别,我想走CS 方向 可看代码都没问题 可是CS 和BS的区别在于 需要调用的函数太多了 需要去了解太多的 包    我这人很烦笔试,但凡有鄙视的,如果题目太基础,我基本都白卷走人,我是来做事的,不是学校毕业的,不想当菜鸟来考基础题的:)
        坚持我的BS ,那我的路在何方?
        我现在基本上已经是负责策划与架构,可我总看不到我所能看到的东西——涨薪资,或者说没有更大的技术上的挑战!!!
        如果我走 CS 路在何方? 

回信内容如下:
 
       看到了你的来信,看得出来你的心情很困惑,我在此不得不花一些时间好好的给你说说。
        从你的文章中得知,你在CS与BS架构方面比较困惑,同时,对自己坚持的东西似乎看不到方向了,我想我从以下两个方面来说:

        1、BS和CS本质上没有任何区别,但他们又有区别,请参考我的书中的某章节
        2、如何利用好现有技术再去深挖它的潜力。
        3、薪资的问题得慢慢来。
 
        好,下面我们来分别阐述。
 
         1、BS和CS本质上没有任何区别,但他们又有区别
 
        我在《Java程序员,上班那点事儿》7.4.1 <B/S是一个很好的创意>中有这样一段描述:
 
        在互联网应用程序应用初期,大多数应用都是建立在C/S结构基础上的,浏览器的应用促使动态页面的实现,于是就有人提出来,能不能用浏览器作为应用程序的客户端呢?
        于是,B/S程序结构便应运而生,浏览器和服务器结构是对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。
        以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在Java这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
        传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。
 
       所以,我们说B/S实际上是在C/S发展多年基础上创意衍生出来的一种程序运行方式。我在我在《Java程序员,上班那点事儿》7.4.2 <B/S程序本身也是一个C/S程序>中有这样一段描述:
 
可以观察一下这两个结构的形式,看看它们有什么相似之处。
 
 
        客户端软件是为了完成更多的管理功能而开发的,通过它将与数据库系统进行数据交换,达到管理数据的目的。将各种计算与数据逻辑加入到客户端软件中,服务器端只负责存取数据,因此,客户端与服务器端交互的数据完全是纯数据流。
然后我们再看一下B/S的架构,




        B/S结构的客户端是浏览器,数据逻辑与计算基本上都是在服务器端进行,客户端仅仅是将计算与数据取得的结果予以呈现,而这时候所呈现的内容也依赖服务器端所返回的Http数据流中包含的标记。
        大家看看这两个结构图的差异,不难发现他们的基本结构极其相似,都是有“客户端”的,只不过B/S的客户端是浏览器而已。这说明,从本质上来说,B/S结构的系统也是一种C/S的软件。

 
 
        所以,当你真正的了解到C/S和B/S的本质与联系后,你就更能够使用好B/S结构的柔韧有余的灵活之处了。
       当然,我看得出来,你应该是一个出身于“ASP”的程序员,ASP的进入门槛较低,利用ASP的思维可以套出JSP,也可以套出PHP,但无论如何也套不出JavaSE,以及VB/VC。所以,你对J2se、VB、VC有很强的神秘感。
        然而,当你了解了他们的本质以后,你会发现也没有什么神秘的了!
        
        2、如何利用好现有技术再去深挖它的潜力。
       如果,你搞JSP不想搞清楚Java是不可能的,但是搞清楚Java不一定要搞J2se的程序。J2se的程序目前来说应用范围在缩小,更多的还是利用Java去开发服务器端组件,多线程网络服务程序等等。
       所以,如何利用好自己的现有技术优势,去深挖它的潜力是尤为重要的。
 
       我想我对你应该有几个建议:
       1、可以研究一下利用Java开发一些主机网络服务程序,利用Java的跨平台优势搞出点名堂来。
       2、利用你B/S结构丰富的知识,搞出些名堂来,别小看PHP,目前业内很多大型门户的开发语言就是PHP,好多开源的网站框架都是PHP的。
 
       3、薪资的问题得慢慢来
 
       我们技术人员往往都容易陷入一个误区,想当然的认为薪资水平一定和技术水平挂钩的。其实,不尽然!
       你说会Java的就一定比会PHP的水平高?
       但有时候,PHP的程序员拿得工资就会比Java程序员工资高,你如何解释?
 
       所以,薪资水平并不等于技术水平,技术水平也并不等于使用哪种语言,或哪种开发方式。
       你说,C/S开发就一定比B/S开发的人工资高?
       谁告诉你的?
 
       影响你工资的只有一个,那就是:
 
       供求关系!
 
       你是一个相对少的人才,你的工资就是相对高的,你是一个相对多的人才,你缺少竞争力,你的工资就相对低。但有时候,你是一个相对多的人才,但是在那个公司的地位相对高,或者某个项目对于这个公司很重要,而你却又是这个项目的创始人之一,缺了你这项目就得找别人研究倆月,那么你仍然工资相对高。
        这说明什么?
    
        供求关系!
 
        所以,你不需要着急,供求关系在一定情况下不平衡时,你的薪资就会调整。当然,这个过程自然是缓慢的,你也可以通过你的方法提示公司方面,但要注意方式方法,切不可以辞职作为要挟,以及其他过激行为,往往会适得其反。
        如果,你不能做到“供求关系”有利于你,那么你应该作的就是去想办法,将“供求关系”调整的适合你,这个就得自己想办法了。
 
       结论:
 
       回答你的问题,你的发展方向是怎么样?
       1、忘掉C/S和B/S的那个耿耿于怀的事情吧!
       2、学会经营自己的优势:是金子就会发光,利用自己的优势,努力营造自己的优势!
 
 
钟声
2009-8-10  0点25分
 

 ☆★☆★快来!!10月25日读者见面会☆★☆★

sudo apt-get update sudo apt-get install ubuntu-make [sudo] password for sqa: Hit:1 http://cn.archive.ubuntu.com/ubuntu jammy InRelease Get:2 http://cn.archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB] Hit:3 https://typora.io/linux ./ InRelease Get:4 http://cn.archive.ubuntu.com/ubuntu jammy-backports InRelease [127 kB] Get:5 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 DEP-11 Metadata [103 kB] Get:6 http://cn.archive.ubuntu.com/ubuntu jammy-updates/main amd64 c-n-f Metadata [18.5 kB] Get:7 http://cn.archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 DEP-11 Metadata [212 B] Get:8 http://cn.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 DEP-11 Metadata [359 kB] Get:9 http://cn.archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 DEP-11 Metadata [940 B] Get:10 http://cn.archive.ubuntu.com/ubuntu jammy-backports/main amd64 DEP-11 Metadata [7,080 B] Get:11 http://cn.archive.ubuntu.com/ubuntu jammy-backports/restricted amd64 DEP-11 Metadata [212 B] Get:12 http://cn.archive.ubuntu.com/ubuntu jammy-backports/universe amd64 DEP-11 Metadata [22.9 kB] Get:13 http://cn.archive.ubuntu.com/ubuntu jammy-backports/multiverse amd64 DEP-11 Metadata [212 B] Hit:15 https://download.docker.com/linux/ubuntu jammy InRelease Hit:16 https://dl.google.com/linux/chrome/deb stable InRelease Get:17 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB] Get:18 http://security.ubuntu.com/ubuntu jammy-security/main amd64 DEP-11 Metadata [43.1 kB] Get:19 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 DEP-11 Metadata [208 B] Get:20 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 DEP-11 Metadata [125 kB] Get:21 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 DEP-11 Metadata [208 B] Get:14 https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu jammy InRelease [29.9 kB] Err:14 https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu jammy InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F6609E60DC62814E Reading package lists... Done W: GPG error: https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F6609E60DC62814E E: The repository 'https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu jammy InRelease' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package ubuntu-make sqa@sqa-Precision-3480:~$ umake android Command 'umake' not found, but can be installed with: sudo snap install ubuntu-make
最新发布
03-29
<think>嗯,用户遇到了问题,运行了sudo apt-get update和sudo apt-get install ubuntu-make,但出现了错误。我需要仔细分析输出内容,找出问题所在,然后给出解决方案。首先,用户在执行apt-get update时,出现了一个GPG错误,来自RabbitMQ的仓库,提示没有公钥。这可能导致后续安装失败,因为无法安全地从该仓库更新。然后,当用户尝试安装ubuntu-make时,系统提示找不到包,并建议使用snap安装。最后,用户尝试运行umake android,但命令未找到。 首先,处理GPG错误。RabbitMQ仓库的公钥缺失,导致无法验证软件包签名,这可能是因为用户添加了该仓库但没有导入对应的密钥。解决方法应该是获取并添加该公钥,使用sudo apt-key adv或者直接下载密钥。不过,如果用户不需要RabbitMQ的仓库,也可以暂时禁用或删除该源,以避免错误。 其次,ubuntu-make包找不到的问题。在Ubuntu Jammy(22.04)中,ubuntu-make可能已被移出官方仓库,转而推荐使用snap安装。因此,用户需要使用snap命令来安装ubuntu-make,而不是apt-get。这解释了为什么系统提示使用snap安装。 然后,用户运行umake android失败,因为尚未安装ubuntu-make。所以正确的步骤应该是先通过snap安装ubuntu-make,然后再使用umake命令。 总结步骤:首先解决GPG错误,可以通过添加公钥或移除问题仓库;然后使用snap安装ubuntu-make;最后配置umake路径或直接使用。此外,可能需要建议用户检查是否需要RabbitMQ仓库,或者处理其他可能影响apt的配置问题。 需要确保用户理解每个步骤的作用,特别是处理GPG错误的部分,因为这涉及到系统安全。同时,要指出ubuntu-make的安装方式变化,避免用户困惑为什么apt找不到包。可能还需要提醒用户snap和apt的区别,以及环境变量的问题,比如snap安装的命令路径可能需要重新登录或手动添加。</think>您在执行软件包管理操作时遇到两个主要问题,以下是逐步分析和解决方案: --- ### 一、GPG签名验证失败(RabbitMQ仓库) #### 问题表现: ```bash Err:14 https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu jammy InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F6609E60DC62814E ``` #### 原因: RabbitMQ软件仓库未正确添加APT公钥,导致系统无法验证软件包签名。 #### 解决方案: 1. **临时跳过(不推荐)** 若暂时不需要RabbitMQ服务,可注释掉该仓库: ```bash sudo sed -i '/packagecloud.io\/rabbitmq/s/^/#/' /etc/apt/sources.list.d/*.list sudo apt-get update ``` 2. **永久修复(推荐)** 通过以下命令添加缺失的公钥: ```bash curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq-archive-keyring.gpg sudo apt-get update ``` --- ### 二、ubuntu-make软件包安装失败 #### 问题表现: ```bash E: Unable to locate package ubuntu-make Command 'umake' not found, but can be installed with: sudo snap install ubuntu-make ``` #### 原因: 从Ubuntu 22.04(Jammy)开始,`ubuntu-make`已从官方APT仓库移除,仅通过Snap渠道提供。 #### 解决方案: 1. **通过Snap安装** ```bash sudo snap install ubuntu-make --classic ``` 2. **验证安装** 安装后需重新登录终端或运行: ```bash source ~/.profile ``` 然后即可使用`umake`命令: ```bash umake android ``` --- ### 三、补充说明 1. **APT与Snap的区别** - APT:传统.deb包管理工具,依赖系统仓库 - Snap:跨发行版的容器化软件包,自动更新 2. **路径问题** Snap软件默认安装路径为`/snap/bin/`,若提示命令未找到,可将此路径加入`$PATH`: ```bash echo 'export PATH="/snap/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` --- ### 最终操作流程 ```bash # 修复RabbitMQ仓库密钥问题(如需要) curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq-archive-keyring.gpg sudo apt-get update # 通过Snap安装ubuntu-make sudo snap install ubuntu-make --classic # 配置环境变量 source ~/.profile # 验证安装 umake --version ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值