2019年1月学习与工作中遇到的问题

举报
轻狂书生FS 发表于 2020/12/03 01:17:16 2020/12/03
【摘要】 1、JVM内存分几种? JVM内存分四种: 栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源。堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收静态区(datasegment)—存放全局变量,静...

1、JVM内存分几种?

JVM内存分四种:

  1. 栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源。
  2. 堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收
  3. 静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放
  4. 代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。

2、CRUD的含义:

crud是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。

3、集群系统下实现session统一

应用服务器间的session复制共享(如tomcat session共享)

session复制共享,主要是指集群环境下,多台应用服务器之间同步session,使session保持一致,对外透明。 如果其中一台服务器发生故障,根据负载均衡的原理,web服务器(apache/nginx)会遍历寻找可用节点,分发请求,由于session已同步, 故能保证用户的session信息不会丢失。

此方案的不足之处:

  1. 技术复杂,必须在同一种中间件之间完成(如:tomcat-tomcat之间).
  2. session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化较快时, 性能下降更加显著. 这种特性使得web应用的水平扩展受到了限制。
  3. Session内容序列化(serialize),会消耗系统性能。
  4. Session内容通过广播同步给成员,会造成网络流量瓶颈,即便是内网瓶颈。  

基于cache DB缓存的session共享

基于redis缓存的session共享

4、web集群时session同步的3种方法

在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上, 如果session不同步的话,一个登录用户,一会是登录状态,一会又不是登录状态。所以本文就根据这种情况给出三种不同的方法来解决这个问题:

 

一,利用数据库同步session

 

在做多服务器session同步时我没有用这种方法,如果非要用这种方法的话,我想过二种方法:

 

1,用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。

 

2,这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群了话,每个mysql节点都要有这张表,并且这张session表的数据表要实时同步。

 

说明:用数据库来同步session,会加大数据库的负担,数据库本来就是容易产生瓶颈的地方,如果把session还放到数据库里面,无疑是雪上加霜。上面的二种方法,第一点方法较好,把放session的表独立开来,减轻了真正数据库的负担

 

二,利用cookie同步session

 

session是文件的形势存放在服务器端的,cookie是文件的形势存在客户端的, 怎么实现同步呢?方法很简单,就是把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。你访问web服务器A,产生了 session把它放到cookie里面了,你访问被分配到web服务器B,这个时候,web服务器B先判断服务器有没有这个session,如果没有, 在去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的 sessoin同步到web服务器B,这样就可以实现session的同步了。

 

说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。

 

三,利用Nosql数据库redis或者memcache同步session

redis或memcache可以做分布式,如果没有这功能,他也不能用来做session同步。他可以把web服务器中的内存组合起来,成为一个"内存池",不管是哪个服务器产生的sessoin都可以放到这个"内存池"中,其他的都可以使用。

 

优点:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。

 

缺点:redis或memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

四,总结

上面三种方法都是可行的

 

第一种方法,最影响系统速度的那种,不推荐使用;

 

第二种方法,效果不错,不过安全隐患一样的存在;

 

第三种方法,个人觉得第三种方法是最好的,推荐使用

5、开放数据库连接(Open Database ConnectivityODBC

是为解决异构数据库间的数据共享而产生的,现已成为WOSA(The Windows Open System Architecture ),Windows开放系统体系结构)的主要部分和基于Windows环境的一种数据库访问接口标准ODBC 为异构数据库访问提供统一接口,允许应用程序以SQL 为数据存取标准,存取不同DBMS管理的数据;使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。

 

6、端口号被占用问题:

1、根据端口号查找对应的进程号

       netstat -ano | findstr 80 //列出进程极其占用的端口,且包含 80

2、据进程号寻找进程名称

       tasklist | findstr 9268

3、杀死80的进程号

       taskkill -PID <进程号> -F //强制关闭某个进程

7、Spring Boot:常用注解

@Configuration 和@Bean

Spring的Java配置方式是通过 @Configuration 和 @Bean这两个注解实现的:

1、@Configuration作用于类上,相当于一个xml配置文件;

2、@Bean作用于方法上,相当于xml配置中的<bean>;

@PropertySource

通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值

用法:
@PropertySource(value = {"classpath:jdbc.properties","xxx"})

@SpringBootApplication

SpringBoot项目的核心注解,主要目的是开启自动配置。;

@Configuration

这是一个配置Spring的配置类;

@Controller

标明这是一个SpringMVC的Controller控制器;

@EnableAutoConfiguration

启用自动配置,该注解会使SpringBoot根据项目中依赖的jar包自动配置项目的配置项;

@ComponentScan

默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。

@Transactional

当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManagerJpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。

 

文章来源: blog.csdn.net,作者:LookForDream_,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/86703240

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。