首页>最新动态>最新动态

身在互联网公司该如何提升竞争力?

创建时间:2019-08-13 来源:本站 访问量:20

身在互联网公司该如何提升竞争力?


有很多小伙伴毕业以后进入了一些传统互联网公司,使用的技术也非常的古老,给他们也带来了很多的困惑,在这里来听一下同学的心声以及分享一下目前市场上比较新的技术,学啥能够保持竞争力?

身在互联网公司该如何提升竞争力?

甲同学:

现在的公司用的struts2+Spring+hibernate,

以后再找工作会不会和社会脱轨,redis都没用,别说多线程微服务了,怎么办呢

乙同学:

听说过actionscript和flex吗,还有flash我们公司还在用呢

丙同学:

strus1+spring+hibernate+ExtJs的实习生想哭

丁同学:

我好难呀! 看着微服务一路懵逼

某同学:

struts,spring,mybatis,layui

等等,那么如果你现在所在的公司还在使用这些技术的话,其实做的越久越会减少自己的竞争力

那么让我们来盘点一下市场上比较流行的技术吧~

身在互联网公司该如何提升竞争力?


分布式框架

1、分布式架构原理和策略

2、分布式服务治理中间件(Zookeeper、Dubbo)

3、分布式消息中间件(RockerMQ、RabbitMQ、Kafka)

4、分布式缓存中间件(Redis、MongoDB、FastDFS)

5、分布式通信(Netty)

6、分布式所搜引擎(ELK)

7、分布式数据存储(Sharding-Sphere)

早期,电信只有座机的时候,系统只有一个打电话的功能和一个计费的功能。因为业务单一,所以只有一个系统。

· 单一业务的单体式架构

身在互联网公司该如何提升竞争力?


后来,电信业务丰富起来了。新增了“短信”、“宽带”、“手机流量”等业务功能。按照常规做法,也只会在原有的“打电话”单一业务系统的基础上,多添加几个业务功能模块而已。所有的业务功能(““电话”、“短信”、“宽带”、“手机流量””)都还是在一个项目内部。如下图:

· 多业务单体式架构

身在互联网公司该如何提升竞争力?


多业务模式下的单体架构,当业务不断扩张、系统内部的业务功能模块越来越多,会导致如下问题:

1、会导致业务功能模块的耦合度太高、不利于扩展和维护,以及推广。

2、再者程序中存在一个魔性的数字:65535(16bit最大值)限制,(因为调用方法的指令容量只有16bit,65535正好是16bit能容纳的最大数字)。重复的方法数太多,会加速达到这个上限。(比如Android 应用65535很容易就上限了)。

比如淘宝、天猫、阿里巴巴三个项目都需要用到支付,设想,将淘宝、天猫、阿里巴巴三个项目整合成一个项目的三个业务功能模块,将会比较杂乱。所以,出现了淘宝、天猫、阿里巴巴三个独立的项目,类似下图:

身在互联网公司该如何提升竞争力?


· 垂直架构

通过一步一步演变,架构已经成为如图所示的垂直式架构。但是大家都发现了其中的计费功能出现了4次。这样肯定不利于项目的维护和统一配置。(并且上图的计费只是众多可能重复模块中的一员)。所以不得不将多个项目都要使用的相同模块独立出来,共享给业务功能使用。这样,就演变成如下图架构:

身在互联网公司该如何提升竞争力?


如图所示,计费被单独提炼出来成为一个独立的app,共其他app共同使用。图中“其他”模块用来代替千千万万类似计费的模块。

这样一来,每一个方块就是一个独立的应用。这样解决了业务复杂度,将业务模块化、独立化,方便共享和扩展。

高并发编程

1、 Locks锁、Tools限制、Aotmic原子、Executor线程池、Collections容器、ForkJoin框架

1)多线程和单线程的区别和联系?

答:

1. 在单核 CPU 中,将 CPU 分为很小的时间片,在每一时刻只能有一个线程在执行,是一种微观上轮流占用 CPU 的机制。

2. 多线程会存在线程上下文切换,会导致程序执行速度变慢,即采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。

结论:即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。

面试官:那使用多线程有什么优势?

解析:尽管面临很多挑战,多线程有一些优点仍然使得它一直被使用,而这些优点我们应该了解。

答:

(1)资源利用率更好

想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:

1| 5秒读取文件A

2| 2秒处理文件A

3| 5秒读取文件B

4| 2秒处理文件B

5| ---------------------

6| 总共需要14秒

从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:

1| 5秒读取文件A

2| 5秒读取文件B + 2秒处理文件A

3| 2秒处理文件B

4| ---------------------

5| 总共需要12秒

CPU等待第一个文件被读取完。然后开始读取第二个文件。当第二文件在被读取的时候,CPU会去处理第一个文件。记住,在等待磁盘读取文件的时候,CPU大部分时间是空闲的。

总的说来,CPU能够在等待IO的时候做一些其他的事情。这个不一定就是磁盘IO。它也可以是网络的IO,或者用户输入。通常情况下,网络和磁盘的IO比CPU和内存的IO慢的多。

(2)程序设计在某些情况下更简单

在单线程应用程序中,如果你想编写程序手动处理上面所提到的读取和处理的顺序,你必须记录每个文件读取和处理的状态。相反,你可以启动两个线程,每个线程处理一个文件的读取和操作。线程会在等待磁盘读取文件的过程中被阻塞。在等待的时候,其他的线程能够使用CPU去处理已经读取完的文件。其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。

(3)程序响应更快

有时我们会编写一些较为复杂的代码(这里的复杂不是说复杂的算法,而是复杂的业务逻辑),例如,一笔订单的创建,它包括插入订单数据、生成订单赶快找、发送邮件通知卖家和记录货品销售数量等。用户从单击“订购”按钮开始,就要等待这些操作全部完成才能看到订购成功的结果。但是这么多业务操作,如何能够让其更快地完成呢?

在上面的场景中,可以使用多线程技术,即将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列),如生成订单快照、发送邮件等。这样做的好处是响应用户请求的线程能够尽可能快地处理完成,缩短了响应时间,提升了用户体验。

多线程还有一些优势也显而易见:

① 进程之前不能共享内存,而线程之间共享内存(堆内存)则很简单。

② 系统创建进程时需要为该进程重新分配系统资源,创建线程则代价小很多,因此实现多任务并发时,多线程效率更高.

③ Java语言本身内置多线程功能的支持,而不是单纯第作为底层系统的调度方式,从而简化了多线程编程.

微服务

1、Spring Boot

2、Spring Cloud

3、Docker容器

微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。

微服务可以在“自己的程序”中运行, 级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。

以上就是一部分我们整理出来的目前市场上比较流行的技术,大家课余时间也可以去多了解学习保持竞争力。