大家好,今天小编关注到一个比较有意思的话题,就是关于java语言random的问题,于是小编就整理了3个相关介绍Java语言random的解答,让我们一起看看吧。
JAVA随机产生100个学生的成绩?
public static void main(String[] args) throws IOException {
int level0 = 0; //0分人数
int level1 = 0;//1分人数
int level2 = 0;//2分人数
int level3 = 0;
int level4 = 0;
int level5 = 0;
如何使用J***a写出验证码?
这个实现起来不难,J***a生成随机验证码,最主要的是绘制字符及干扰线,下面我简单介绍一下实现过程,感兴趣的朋友可以尝试一下:
01
设置验证码样式
首先,设置需要生成验证码的样式,这个是绘制验证码的基础和必须条件,包括字体、可选字符集、背景色、图像宽度、图像高度、字符个数等,后面绘制函数就是根据这些设置的属性绘制验证码,可以设计的复杂,也可以设计的简单,这里我只做了简单必须要的设置:
02
绘制验证码
样式设置完成后,我们就可以直接绘制验证码了,测试代码如下,基本思想先创建一个图片缓冲区(即BufferedImage对象),然后得到绘制环境(即Graphics2D对象),最后再直接根据属性绘制验证码并保存即可,包括背景色、字体、旋转角度的设计以及干扰线的绘制等,代码量比较多,但理解起来并不难:
03
生成验证码
绘制函数编写完成后,就是在main函数中调用生成验证码,这里就非常简单了,创建一个VerifyCode类对象,然后直接调用drawImage函数即可,程序成功运行后,会在指定目录下生成一个验证码图片:
至此,我们就完成了利用J***a生成随机验证码。总的来说,整个过程非常简单,最主要的是字符和干扰线的绘制,只要你有一定J***a基础,熟悉一下上面的代码和示例,很快就能掌握的,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
J***A面试又被问一致性hash算法,到底啥是一致性hash?
其原理主要是把节点(做缓存的物理主机,如IP)和数据(要缓存的具体数据)都做一次哈希运算,然后把数据缓存到哈希运算后离得最近的节点上去。
此处借个图
其中,右边的深蓝色的表示节点,橘色的表示数据,然后按顺时针方向去寻找最近的节点就可以了……
需要注意的地方有
第一,节点和数据在哈希运算(取模)过程中用到的除数是一致的。如节点的哈希运算为hash(服务器的IP地址)% 2^32,数据的哈希运算为hash (数据名称)% 2^32等。
第二,哈希运算后,所有的结果都分布在一个哈希环上。
第三,节点的分布可能并不是均衡的,所以会加入左边浅蓝色的虚拟节点。
优点
万一有节点挂掉或者新加节点,不会影响其它的节点和缓存数据,原因很简单,就在那个取模的除数上。
其实不光光是J***a面试,其它编程语言的面试过程中往往也会问及一致性Hash算法问题,不少开发者可能听说过“一致性Hash”这个术语,但却不了解什么是一致性Hash,一致性Hash是用来解决什么问题的。
不少人容易把“Hash算法”与“一致性Hash算法”混淆,甚至认为两者是同个意思。其实,“Hash算法”与“一致性Hash算法”是不同的概念,“一致性Hash算法”是一种特殊的“Hash算法”!
1、Hash算法
Hash算法有很多种说法,如:散列函数、哈希算法等,它是一种函数,用来把任意长度的内容通过Hash算法转换为固定长度的[_a***_]。
常见的Hash算法有:MD5、SHA1等。MD5都用过,任何长度的字符串经过MD5处理后会得到固长的Hash值。
2、一致性Hash算法
一致性Hash算法是在Hash算法基础上建立和改进的,它是一种分布式算法,能确保数据的分布平衡性,常用于负载均衡类的应用。
1、普通取模Hash
普通取模(余数)Hash算法很简单,就是:Hash值 % 节点数 。这种方式,一旦节点数变化了,原先的Hash结果与节点的映射全部失效!
现在互联网面对的都是海量的数据和海量的用户,我们为了提高数据的读取,写入能力,一般都***用分布式的方式来存储数据,比如分布式缓存。我们有海量的数据需要缓存,所以一台机器是肯定不够的,于是我们需要将数据分布在多台机器上。
该如何决定哪些数据放在那台机器上,可以借助数据分片的思想,***用hash算法对数据取hash值,然后对机器取模,这个最终值就是存储缓存的机器编号。
但是如果数据增多,原来的10台机器不够,需要扩容到13台机器,那么原来数据是通过与10来取模的,比如15这个数据,与10取模就是5,现在与13取模就是2。机器的编号完全变了,扩容并不是简单的增加机器,而是需要重新计算机器上的缓存存储位置。这无疑是一件很头疼的问题。
所以,我们需要一种方法,是的新加入机器后,并不需要做大量的数据搬迁,这时候就需要用到一致性hash算法了。
***设我们有k个机器,数据的hash范围是[0-Max],现在我们将范围划分为m个小区间(m要远大于k),每个机器负责m/k个区间,当有新机器加入时,我们只需要将某几个小区间的数据搬运到新的机器上即可,这样既不用全部搬移数据,也保持了各个机器的数据均衡。
我来给大家讲讲一致性hash算法,如果有理解错误的地方,也请大家留言指正。
就拿Redis来举例吧,我们经常会用Redis做缓存,把一些数据放在上面,以减少数据的压力。
当数据量少,访问压力不大的时候,通常一台Redis就能搞定,为了高可用,弄个主从也就足够了;
当数据量变大,并发量也增加的时候,把全部的缓存数据放在一台机器上就有些吃力了,毕竟一台机器的***是有限的,通常我们会搭建集群环境,让数据尽量平均的放到每一台Redis中,比如我们的集群中有三台Redis。
那么如何把数据尽量平均地放到这三台Redis中呢?最简单的就是求余算法:hash(key)%N,在这里N=3。
看起来非常地美好,因为依靠这样的方法,我们可以让数据平均存储到三台Redis中,当有新的请求过来的时候,我们也可以定位数据会在哪台Redis中,这样可以精确地查询到缓存数据。
到此,以上就是小编对于j***a语言random的问题就介绍到这了,希望介绍关于j***a语言random的3点解答对大家有用。