hibernate的优缺点是什么
Hibernate的优缺点:优点:
1、程序更加面向对象;
2、提高了生产率;
3、方便移植(修改配置文件);
4、无侵入性。缺点:1、效率比JDBC略差;2、不适合批量操作。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
servlet和reactive的区别
没有servlet.
reactive:
adj.反应的;电抗的;反动的Presumablyreactivesurfacesbecameblocked.反应表面可能被堵塞了。
Theseatomsarehighlyreactive.这些原子有较高的反应活性。
Ammoniaisaveryreactivechemical.氨是很活泼的化合物。
Itisarguedthatthepyramidalradicalwouldbemorereactive.可以认为锥形的自由基比较活泼。
Severestericeffectsatthereactivecarbonwouldimpedethesubstitution.大的立体效应阻止在碳上的取代。
spring框架写了多少年
2002年10月,RodJohnson撰写了一本名为ExpertOne-on-OneJ2EE设计和开发的书。本书由Wrox出版,介绍了当时Java企业应用程序开发的情况,并指出了JavaEE和EJB组件框架中的存在的一些主要缺陷。在这本书中,他提出了一个基于普通Java类和依赖注入的更简单的解决方案。
在本书发布后不久,开发者JuergenHoeller和YannCaroff说服RodJohnson创建一个基于基础结构代码的开源项目。Rod,Juergen和Yann于2003年2月左右开始合作开发该项目。Yann为新框架创造了“Spring”的名字。YannCaroff在早期离开了团队,RodJohnson在2012年离开,JuergenHoeller仍然是Spring开发团队的积极成员。
自2004年1.0版本发布以来,Spring框架迅速发展。Spring2.0于2006年10月发布,到那时,Spring的下载量超过了100万。Spring2.0具有可扩展的XML配置功能,用于简化XML配置,支持Java5,额外的IoC容器扩展点,支持动态语言。
在Rod领导下管理Interface21项目于2007年11月更名为SpringSource。同时发布了Spring2.5。Spring2.5中的主要新功能包括支持Java6/JavaEE5,支持注释配置,classpath中的组件自动检测和兼容OSGi的bundle。
2007年,SpringSource从基准资本获得了A轮融资(1000万美元)。SpringSource在此期间收购了多家公司,如Hyperic,G2One等。2009年8月,SpringSource以4.2亿美元被VMWare收购。SpringSource在几周内收购了云代工厂,这是一家云PaaS提供商。2015年,云代工厂转型成了非营利云代工厂。
2009年12月,Spring3.0发布。Spring3.0具有许多重要特性,如重组模块系统,支持Spring表达式语言,基于Java的bean配置(JavaConfig),支持嵌入式数据库(如HSQL,H2和Derby),模型验证/REST支持和对JavaEE的支持。
2011年和2012年发布了许多3.x系列的小版本。2012年7月,RodJohnson离开了团队。2013年4月,VMware和EMC通过GE投资创建了一家名为Pivotal的合资企业。所有的Spring应用项目都转移到了Pivotal。
2013年12月,Pivotal宣布发布Spring框架4.0。Spring4.0是Spring框架的一大进步,它包含了对Java8的全面支持,更高的第三方库依赖性(groovy1.8+,ehcache2.1+,hibernate3.6+等),JavaEE7支持,groovyDSLforbean定义,对websockets的支持以及对泛型类型的支持作为注入bean的限定符。
2014年至2017年期间发布了许多Spring框架4.xx系列版本。
Spring5.0GA版本于2017年9月28日发布。Spring5.0开始支持JDK8和JavaEE7,同时兼容JDK9。全面支持Servlet3.1,还引入了一个全新的模块SpringWebFlux用于替代老话的spring-webmvc;对Kotlin也有了更好的支持。
所以从2003到现在2021年,写了18年了
既然有http请求,为什么还要用rpc调用
首先http和rpc并不是一个并行概念。
rpc是远端过程调用,其调用协议通常包含传输协议和序列化协议。
传输协议包含:如著名的[gRPC](grpc/grpc.io)使用的http2协议,也有如dubbo一类的自定义报文的tcp协议。
序列化协议包含:如基于文本编码的xmljson,也有二进制编码的protobufhessian等。
因此我理解的你想问的问题应该是:为什么要使用自定义tcp协议的rpc做后端进程通信?
要解决这个问题就应该搞清楚http使用的tcp协议,和我们自定义的tcp协议在报文上的区别。
首先要否认一点http协议相较于自定义tcp报文协议,增加的开销在于连接的建立与断开。http协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是http也可以使用protobuf这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。
HTTP有用信息占比少,毕竟HTTP工作在第七层,包含了大量的HTTP头等信息。其次是效率低,还是因为第七层的缘故。还有,其可读性似乎没有必要,因为我们可以引入网关增加可读性。此外,使用HTTP协议调用远程方法比较复杂,要封装各种参数名和参数值。
通用定义的http1.1协议的tcp报文包含太多废信息,一个POST协议的格式大致如下:
HTTP/1.0200OK
Content-Type:text/plain
Content-Length:137582
Expires:Thu,05Dec199716:00:00GMT
Last-Modified:Wed,5August199615:55:28GMT
Server:Apache0.84
<html>
<body>HelloWorld</body>
</html>
即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。
那么假如我们使用自定义tcp协议的报文如下:
报头占用的字节数也就只有16个byte,极大地精简了传输内容,采用自定义tcp协议的rpc来进行通信减少了通讯内容,可以提高通讯效率。
所谓的效率优势是针对http1.1协议来讲的,http2.0协议已经优化编码效率问题,像grpc这种rpc库使用的就是http2.0协议。这么来说吧http容器的性能测试单位通常是kqps,自定义tpc协议则通常是以10kqps到100kqps为基准
简单来说成熟的rpc库相对http容器,更多的是封装了“服务发现”,"负载均衡",“熔断降级”一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个httpservlet容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。
所以为什么要用rpc调用?因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。
tomcat与nginx,apache的区别是什么
Tomcat与Nginx、Apache的关系如下图。由配送中心选择Apache、Nginx中的某一辆货车将包裹送给客户。虽然Apache、Nginx两辆车的用途是一样的,仔细区分它们两还是有区别的,比如:货物装载的速度、方式不一样,Apache有水箱可以直接运送活鱼而Nginx没有。
Tomcat有点像装活鱼的特殊包装。经过特殊包装打包的活鱼就可以通过Nginx和Apache运送到用户手中。另外,使用Tomcat包含了一种慢速的配送服务,所以配送中心一般都采用Nginx、Apache等配送。
通过上面的比方引申Apache、Nginx、Tomcat的实际用途Apache全称ApacheHTTPServer,它是Apache软件基金会的一个开放源码的网页伺服服务器软件。
Apache支持模块多,性能稳定。Apache本身是静态解析(静态页面),适合静态的HTML、图片等,但可以通过扩展脚本、模块来支持动态页面等。Apche可以支持PHP、CGI、Perl,但要使用Java就需要Tomcat,Java请求会通过Apache转发给Tomcat处理;
Nginx同样也是一款开源的HTTPServer,它是由俄罗斯人编写的轻量级HTTP服务。
Nginx是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器。Nginx本身不支持生成动态页面,很大部分Web服务器使用Nginx,主要通过Nginx的反向代理来实现负载均衡器。
Apache、Nginx本质上就是一种运用在HTTP服务器上某种应用程序,它们通过绑定服务器的IP地址并监听某一个TCP端口来接收并处理HTTP请求,这样用户(一般通过IE、Chrome、Firefox等发送请求并显示内容)就能够通过HTTP协议来获取服务器上的网页(HTML+CSS样式)、文档(PDF、txt、rar等)、音频、视频等资源。如下图:
不仅Apache和Nginx,绝大多数编程语言所包含的类库中也可以实现简单的HTTP服务供开发者使用,如:JavaHTTPServer、PythonSimpleHTTPServer。
Apache和Nginx的对比
Nginx使用异步非阻塞型事件驱动的方法来处理请求,而Apache则是通过同步阻塞型的方法来处理请求。
Apache接收一个请求后,就会创建一个进程,每个进程内单线程。对于一个负载相对较高的网站来说,256的进程,也就是256个线程。线程处理请求时是同步阻塞模式,会一直等待该请求读取程序文件(IO)(同步),执行业务逻辑,返回给客户端,所有操作完成之后才能处理下一个请求(阻塞)。
如果服务器已经达到256的极限,那么接下去的访问就需要排队。这也就是为什么某些服务器负载不高的原因了。
而Ngnix接收一个请求后,不会等待这个请求的文件读取操作完成之后才接收下一个请求,它不会等待这个请求的后续的处理结果。而是会马上循环处理下一个请求(不阻塞)。请求的程序文件执行完成之后,会主动通知该线程,不用你主动去等待或者轮询查看(异步)。最后返回给客户端。
这样做,每个请求过来就不需要等待很长的时间排队,而是马上就能接收,开始进行处理了。等处理完成之后,会主动通知回调这个线程进行数据返回。
基于上述特性Nginx更轻量级,比Apache占用更少的内存及资源抗并发,Nginx静态处理性能比Apache高3倍以上。在高并发下Nginx能保持低资源低消耗高性能高度模块化的设计。但Apache组件比Nginx多,对PHP的支持比较简单,Apche的Rewrite也比Nginx强大一些。
Tomcat用于扩充Apache和Nginx的动态性能从上面我们知道了Apache和Nginx的优势在于静态解析,那么动态解析就会交给其他模块处理,如Tomcat。
Tomcat是由Apache软件基金会旗下Jakarta项目开发的Servlet容器,实现对Servlet和JavaServerPage(jsp)的支持。Tomcat本身也包含了HTTP服务,也可单做独立的Web服务,但用的不多。
Tomcat一共设计了4种容器,它们分别为Engine、Host、Context、Wrapper,各个容器组件之间的关系是由大到小,即父子关系,它们之间关系形成一个树状的结构,它们的实现类都实现了Container接口。
总结如果Apache、Nginx、Tomcat打一局LOL,Apache和Nginx像是冲在最前面的英雄。而Tomcat攻击性能弱,它主要负责打辅助,奶前面的英雄。
Nginx并发性好,CPU、内存占用低。但如果rewrite频繁,那还是选择Apache好一些,Apache在处理动态请求更有优势。
以上个人浅见,欢迎批评指正。
认同我的看法,请点个赞再走,感谢!
喜欢我的,请关注我,再次感谢!
@webservlet是什么注解
这是web应用中Servlet类的注解,后面应该有参数的,应用在Servlet类中。根据Servlet3.0最新规范(相对于以前的Servlet2.X)提供了新的Servlet配置形式:“注解”这个说白了就是取代了以前在
web.XML
文件中<servlet>标签里的一些东西而已