zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Java开发编程指南 & 技术详解 续

2023-02-18 16:30:43 时间

我理解的搜索

搜索在计算机中的地位是十分重要。无论是在内部系统还是在外部的互联网站上,都少不了 检索系统。数据是为了用户而服务。计算机在采集数据,处理数据,存储数据之后,各种客 户端的操作 pc 机或者是移动嵌入式设备都可以很好的获取数据,得到你想要的数据服务。

检索分为 SQL 过滤查询和全文检索。数据都是放在数据库里,数据库里的数据量太大,要检索到精准的数据是需要很好的用户体验。用户对响应时长要求特别严格,最好控制在一定的 响应时间内。SQL 查询是普通的字段过滤,一般在没有走全表扫描的情况下都是性能较好的数据查询方式。全文检索的实现方式是在数据库设计的时候就有这些模块,比如 MySQL 的全文检索。之后在市面上有公司开发了成型的开源产品,比如 Lucene 等。我只学过 luncene 框架,只能就是论事。在银行工作的时候有接触过 es 框架,到现在也没仔细去弄懂。每个人的学习能力不一样,有的工程师削尖了脑袋要去专研每个技术。我只是在学习 Java 开发框架的时候接触过 Lucene 框架,自己跟着源码敲了一遍那个搜索引擎。对于那种根据分词查询数据的方式有深刻的映像,但是并不是每个系统都是要使用全文检索分词搜索。

按需开发,意思就是根据需求进行商业开发。以用户体验为中心,金钱盈利为目的。没有谁在为自己做无用功,得到与失去,不要去说,也说不准。像普通的字段搜索看起来十分简单, 其实就是很简单。但是如果遇到数据量大的情况,或者是用户不会使用系统的情况下,都是有问题的。像百度,Google,搜什么就有什么,这就是全文检索。

搜索,依赖于搜索引擎。搜索引擎的建立是十分困难的事情。以我现在的水平理解的搜索, 只能说个大概。我做 Java 6 年时间,虽然没有写过搜索引擎,但是没有经验的同学可以去尝试着实践下。做任何系统都是需要构建 bs 架构或者是 cs 架构,cs 架构是 client-server 架构。

在操作系统中有客户端软件开发包,bs 架构是 broswer-server 架构,在所有的数据操作都是在浏览器中实现,把浏览器当做一个子系统,子系统上面又有很多应用程序... bs 架构是特殊的 cs 架构。

在大学学习计算机编程开发,首选的语言是 C++。那种语言是写客户端软件,自己也是学的很纠结,以为没有很好的效果。大三休学的时候学习了 Java,接触全文检索,学习了前端页面的设计开发,后台数据库的建立。到现在有更多的想法和思考。爬虫的建立,爬虫是怎么 从网站上爬数据,用户是怎么在网站上面搜索数据。

大学毕业之后对于搜索引擎的理解画了个草图

像只爬虫

一般的 java IDE 的 debug 是这样设计

爬虫是怎么在网站上爬数据,为什么只能爬网站的数据。现在的 web 浏览器都支持 HTML 标签编辑的网页,HTML 标签页是 dom 元素。每个 DOM 元素都是一个实体对象,在数据库中体现的就是 dom 元素实体对象表。Dom 元素表里存放的就是网页标签所承载的基础数据和一些基本属性。每当一个网站上面的标签包裹的数据发生变化,就要触发数据写 write 事件,即 WriteEventListener,更新索引库里的索引数据,和文档库里的文档数据。这种数据更新同步方式叫做即时同步方式,是的数据库里的数据和索引库里的数据保持一致性。用户查询数据的时候总能查到最新的数据,用户查数据都是走索引库再走文档库,这样性能更好。

至于怎么构建 dom 元素数据库,怎么构建 dom 元素索引库。那些都是商业库,需要开发注册维护,就像我们在某个地方开商店一样,需要办理很多手续。

前后端分离后模块开发

画页面这个程序设计工程师嘴上的口头禅是在 2016 年在建行刚开始最开发的时候听到的, 因为大学的时候学习的程序设计语言是一 C++为主,对于前端页面这种能看到效果只是一种很难体会的概念。学习 C 语言程序设计的时候显示在你眼前的是一个命令行黑屏,学 C++, C#都是。作为大学生初学程序设计开发,黑屏可以设置为白屏,只是要坚持练习编写编译代码。

大学同学总是说你在大学四年中如果能够写出一个图书管理系统,毕业才能叫做会编程。一 直在尝试,发现延修一年才能够设计一套图书借阅系统。不会写算法,但是知道编程是怎么 回事,那是在跟着市面上培训班的视频来学习一年之后的效果。在大学中,只是学习到一些 基础技能,还是学的很认真。

毕业之后在广州,找工作找了一个月,终于找到一个初级开发在银行做后端。在学校,写完 毕业论文之后就离开,一路向南。

刚开始做开发的时候,没有经历过漫长的实习过程,不管你没有编程开发经验,都是在特大的高压之下做开发任务。使用建设银行的前端框架画页面,同时写后台接口,联调,解决开发的业务 bug,测试成功提交代码。这个过程很快,但是也会让你成长很快。没有一定的抗压能力,都会被退出。没有参加过编程实习,在黑龙江念书的时候,面试过一家公司,做了一套前端编程测试题,实习就实习,就是可能会让你打酱油也可能让你学到点什么。在广州, 做过一些公司的后端实习测试题,开出来的工资就是 2k-3k,但是这个过程也会很长。

从建设银行退出来之后,过完国庆节日,去了一家小型的公司,遇到一个也是建设银行的高 管。前后端分离开发,新型的开发概念,2017 年元月初的时候接触了 bootstrap 前端技术框架。有前端工程师画页面,后端开发只需要编写提供数据的接口,进行前后端联调。这种开 发模式效率更高,程序员的分工明确,压力没这么大,做出来的系统软件用户体验也有很大 的改善。Java 开发之前是使用 JSP 和前端页面进行数据渲染,现在使用 JS 框架,更轻量级的开发。

在后来的几年的开发过程中,接触的前端 js 框架虽然不多,但是更新的很快。前端工程师和后端工程师的技术技能分离的更清晰,分工明确。前端工程师虽然不是是一个新的开发技 能职位,在 Java 开发领域,使用 JavaScript 框架集成项目的前端页面展示效果,效率性能和用户体验都有很大的提升。

项目前后端分离之后模块开发,做后台的开发压力减小,做前台的只需要画好页面和后端联 调测试数据正确性,分工明确的一种很好的配合。前端开发的工作压力肯定是有,每个职位 都有它存在的必要性,作为后端开发没有评价的必要性。建筑开发,记得小的时候是有些主 要的瓦匠什么活都可以干,但是建的都是些农村的小洋楼。在大城市,建高楼大厦,很多工 作都分得很细,效率会更高,时间就是金钱。大城市人口密度高,对人口红利要求大,质量 也高,事情不能一个人可以完成。

编译原理

Java 程序员或者是 Java 工程师在逐渐成长为高级开发的时候,他们看问题的方式写工作的方式都有自己的一套方式。每个人的工作效率不一样,但是都要达到同一个目的。对于开发 任务而言,测试通过是最低的要求。Java 的集成开发环境十分优秀,从西方美国的 Eclipse 到欧洲的 Idea,程序员开发起来运用的越来越顺畅。好的工具让工程师的工作事半功倍。

Java 的代码存在像一颗树一样。学习过编程开发之后,英语在国际化中的社会地位越来越高。作为通用语言,字母、数字和操作符组合就成了一句话,多了就成了一篇文章,文章一流动就成了一本书。数据库就是存放数据书籍的大仓库。

编译器的词法语法,《编译原理》那本龙书只是略看了一点点。操作符有它存在的重要性, 就是有点抽象。简单的东西会变得抽象,有的会变得难懂。操作符的作用和方法接口的作用 是一样的。学习过 C++的开发工程师都知道操作符也可以自定义实现过程。

方法和对象其实是可以当做一回事。对象在 Java 的开发中是要在堆内存中分配存储空间,

堆内存需要使用 Java 虚拟机进行托管。对象是引用类型数据,复杂数据类型。复杂数据类型的数据是有简单的数据类型组合而成。简单的数据类型是 Java 的 8 中基础数据类型。栈stack 中只能存储基础数据类型,而堆中存储基础数据类型是一块一块的,很多的基础数据类型数据组合在一起就成了堆块。

简单数据组合成为复杂数据。计算机中央系统处理器 CPU 处理数据,数据通过指令处理数据之后在寄存器,之后会在一级缓存,二级缓存,三级缓存,主要运行内存中存在。数据固 化会以物理介质的形式存在计算机固态磁盘中,而虚拟内存也是固化对数据存储区域,存放 的是一些特有的数据。

计算机的基础数据存储介质在计算机编程语言的提现方式都是使用数组 array,像人体的细胞一样,里面存放的就是 10101…这样的数字。数据在电子与电气的体现方式是继电器,高电频与低电频,物质与能量进行交互。

从继电器到我们手中使用的手机或者是 PC 终端,能量与数据状态进行转变。构建软件项目就像搭建一座高塔一样,从打地基到一步一步建立高层。每一层需要一层的代理解释器,如 果需要进行数据存储,连接远程或者是本地数据库。时间与空间,资源与速度,性能看处理 器与存储器。每一层的解释都需要时间和空间,到底一座高楼适合建立几层,每个地方的设 计方式是不一样。解释器和编译器的概念一样,虚拟机也是一层解释器。最底层的通用语言 是继电器的高低电频,再往上一层的抽象数据表现方式是二进制数据 100100…。

CPU 的计算长度从 8 位升级到 16 位,再到 32 位和现在的 64 位,说明处理器处理数据的单位能力在提升。每 8 位就是一个字节 byte,多个字节再进行定义形成一些基本的编程语言数据类型。国际的一些标准组织一开始就制作了 ASCII 表,形成基础的编码标准使得数字和字符以及操作符进行相应的关联,在手机上面或者是其他的嵌入式设备上面可以显示国际标 准字符。

图片的存储方式也是类似,移动的图片会成为视频。声音是移动的波纹,不移动也是二维图形。数字和字符对这些数据进行存储。前人栽树,后人乘凉,组件化,装配组装就成不同的产品。 用户体验和用户量,看团队和市场。

分布式微服务

分布式的思想在大量的数据处理操作方案中涌现了很多的解决方式。Java 是 90 年代出现的语言,在嵌入式移动领域和 web 系统 PC 端占据着较大的市场。移动安卓以及现在的企业H5 小程序,在企业的数字化转型中起着十分重要的作用。

分布式微服务实现的框架是在 2017 年 springboot 开原框架面试之后的产品。国产的框架dubbo 和泊来品 springcloud 都是在 Java 业界对控制器层进行服务拆分的框架。一个服务接口开启一个线程,使用集群或者是单节点进行数据服务处理和提供。

计算机是一台机器,处理数据和获取数据的机器。计算机中央系统处理器 CPU 读写数据的频率是衡量芯片好坏的核心参数。软件编程分为硬件编程和软件编程。硬件编程是偏向底层

硬件的程序开发,像一般的驱动软件是计算机操作系统操作底层硬件的一层软件编码。硬件 开发如嵌入式开发主要的开发语言是 C/C++,之前有很多的该系列 API 供调用和复用。对于分布式的概念在 Java 领域是有现成的解决方案。

多任务异步操作系统不会阻塞任何任务的运行。一台 PC 计算机可以同时挂载很多的操作任务。操作人员的感觉是很多的系统软件或者是应用软件都可以同时运行,看着视频电影之后 可以马上切换到工作软件 office 上面。上下文的切换是需要时间,运行内存和持久化内存分别会有不同的操作分类和用处。

PC 机主要内存称之为主存,是运行可访问内存 RAM。运行可访问内存是运行软件进行数据交换的主要硬件。缓存是不同硬件内存之间进行缓冲的主要内存带,是临时存放数据的硬件。 寄存器主要为中央系统服务器服务,内存十分小,但是读写数据的效率十分高效。数据服务器一断电在运行内存中的数据是否持久化的问题有的是用户自己选择,有的是批量处理固化存储,有的是及时进行存储。硬件需要操作研究的东西还有很多,都是为了更好的提供数据服务。

分布式存储软件中间件 Redis 现在在企业界使用非常多。使用固定的缓存进行临时数据的存储和读取,还有很多的新概念的实现和运用。分布式锁的实现,对异步操作数据线程的智能 化操作。

软件层Java 的开发业务逻辑层有在 2019 年接触springcloud 框架,企业级分布式微服务框架。Dubbo 框架也是分布式微服务的框架,作为初级开发的时候有接触过。微服务开发对于程序开发人员来说难度并不是很大,像应届毕业生刚接触企业开发框架的感觉是一样的。Java 控制器层的框架从自定义 spring servlet 到 struts1, struts2,springMVC , springCloud …,技术的更新换代是有时间期限。每一个十年都有一种新的开发语言产生,对于开发框架,一到两年就会有个新的版本上市。上市的意味着在市场是上面是稳定的开发版本,经过大量的测试和市场调研才会进行公布的结果。

分布式微服务的的注册中心 Euraka,第一次接触是在书本上面看到。在 2019 年在公司软件部门也有看到架构师在搭建这种新的微服务框架。框架的注册中心一直在更新,从 Euraka 到 consoul 再到 nacos。分布式开发框架的集群部署是十分费时费力费钱。微服务就是这点意思,服务拆成微服务,微服务在拆分成微服务 … 。程序递归也是这样的思想。单体应用是只有一个服务器端给不用的用户端提供数据服务。单体应用后来分为基于服务的的架构, 模块化开发,使用 maven 进行托管。分布式仓储系统管理软件 Java 包,通过 maven 进行集成和配置。现在的企业开发模式都是在这种分布式存储的思想下进行,开发效率和运行效率都有很大的提升。微服务框架是一个服务托管中心,枢纽集散中心。

互联网络的接触,成千上万的网络网民互联冲浪需求。网络流量的管理和控制,并发请求来 到服务器端之后怎么进行服务请求集散选择和分配。Nginx 是一个使用 C 语言编写的服务请求反向代理,计算使用哪个程序节点为用户提供服务。独立的组件并不是归属于 Java 系列的框架。Java 微服务领域 springcloud,组件 feign 会决定微服务会路由到哪个服务接口。一个服务接口是有一个服务器集群进行委托管理。主线程是程序运行的主要入口,用户线程有 分为父线程和子线程。微服务框架的主要任务对这些线程进行管理,注册中心管理节点运行 状态。服务续约,服务发现,服务治理,服务熔断机制,这个微服务框架集成很多的大数据

服务性能提升解决方案的实现。

微服务部署和管理虽然不是开发的主要工作任务,但是如果你要有很多的数据处理经验,这 条路线有价值值得去探索。