编程遇到的问题
常见问题
随机数种子问题:
在随机数生成那一块写sase方法的构造是遇到的问题
Random 通常用来作为随机数生成器,它有两个构造方法:
Random random = new Random();
Random random2 = new Random(50);
1.不含参构造方法:
public Random() {
setSeed(System.nanoTime() + seedBase);
++seedBase;
}
2.含参构造方法:
public Random(long seed) {
setSeed(seed);
}
都调用的 setSeed 方法
public synchronized void setSeed(long seed) {
this.seed = (seed ^ multiplier) & ((1L << 48) - 1);
haveNextNextGaussian = false;
}
可以看到,不含参构造方法每次都使用当前时间作为种子,而含参构造方法是以一个固定值作为种子
那么什么是seed种子?
seed 是 Random 生成随机数时使用的参数:
Random 中最重要的就是 next(int) 方法,使用 seed 进行计算:
protected synchronized int next(int bits) {
seed = (seed * multiplier + 0xbL) & ((1L << 48) - 1);
return (int) (seed >>> (48 - bits));
}
举个例子
@Test
public void testRandomParameter(){
System.out.println("Random 不含参构造方法:");
for (int i = 0; i < 5; i++) {
Random random = new Random();
for (int j = 0; j < 8; j++) {
System.out.print(" " + random.nextInt(100) + ", ");
}
System.out.println("");
}
System.out.println("");
System.out.println("Random 含参构造方法:");
for (int i = 0; i < 5; i++) {
Random random = new Random(50);
for (int j = 0; j < 8; j++) {
System.out.print(" " + random.nextInt(100) + ", ");
}
System.out.println("");
}
}
总结:
- 随机数是种子经过计算生成的。
- 不含参的构造函数每次都使用当前时间作为种子,随机性更强
- 而含参的构造函数其实是伪随机,更有可预见性
Mysql中字段名字与保留字冲突
当数据库中起的名字与保留字冲突时会出现如下错误:
修改方式将名字用``(TAB上面的键)括起来
Vue
中data 数组更新后页面不同步动态渲染更新问题解决思路
首先由于 JavaScript 的限制 Vue
不能检测以下数组的变动,因此如果像变动ranking.data.name
的值就不能直接使用ranking.data[0].name = "dabc"
,这样会导致后台更新但是页面不会对其进行渲染。
在研究了文档以及自己代码后,对项目中遇到的问题进行总结。
data() {
return {
ranking: {
data: [
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 55
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 120
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 78
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 66
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 80
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 80
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 80
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 80
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 80
},
{
name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13',
value: 80
}
],
carousel: 'single',
unit: '大帧'
},
water: {
data: [20],
shape: 'roundRect',
formatter: '{value}%',
waveNum: 2
},
}
}
-
所写项目变量类型分为两种:
-
ranking: { data: [ { name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13', value: 55 }, { name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13', value: 120 }, { name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13', value: 78 } ], carousel: 'single', unit: '大帧' }
不能直接定位到对象,写法是:
let temp = { data: [ { name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13', value: 55 }, { name: '2022/06/03 12:33:13 - 2022/06/03 13:55:13', value: 120 } ], carousel: 'single', unit: '大帧' }; for (let i = 0; i < data.data.length ; i++) { temp.data[i].name = data.data[i].timeString; temp.data[i].value = data.data[i].numProcessedFrame; } this.ranking = temp; Vue.set(this.ranking,temp);
定义一个一模一样的对象,对该对象进行操作,最后通过
Vue.set
的方式将temp值赋给ranking
-
第二种为直接能够定位到对象
rate: [ { id: 'centerRate1', tips: 60, colorData: { textStyle: '#3fc0fb', series: { color: ['#00bcd44a', 'transparent'], dataColor: { normal: '#03a9f4', shadowColor: '#97e2f5' } } } }, { id: 'centerRate2', tips: 40, colorData: { textStyle: '#67e0e3', series: { color: ['#faf3a378', 'transparent'], dataColor: { normal: '#ff9800', shadowColor: '#fcebad' } } } } ] this.$set(this.rate[1],'tips',data.data[1]); this.$set(this.rate[0],'tips',data.data[2]);
-
直接通过key值赋给相应的对象
MyBatis中xml文件中的大于 大于等于 小于 小于等于 写法
原始sql
select sc_grade, case
when sc_grade >0 and sc_grade <60 then '不及格'
when sc_grade >=60 and sc_grade <=70 then '及格'
when sc_grade >70 and sc_grade <=80 then '良好'
when sc_grade >80 and sc_grade <=90 then '中等'
when sc_grade >90 and sc_grade <=100 then '优秀'
else '其他' end as grade_rank
from t_student_course where sc_date='2019-06-06' and course_id='2'
xml中的写法
写法1:
原符号 < <= > >= & ' "
替换符号 < <= > >= & ' "
select sc_grade, case
when sc_grade >= 0 and sc_grade < 60 then '不及格'
when sc_grade >= 60 and sc_grade <= 70 then '及格'
when sc_grade >= 70 and sc_grade <= 80 then '良好'
when sc_grade >= 80 and sc_grade <= 90 then '中等'
when sc_grade >= 90 and sc_grade <= 100 then '优秀'
else '其他' end as grade_rank
from t_student_course where sc_date=#{sc_date} and course_id=#{course_id}
写法2:
>= 的写法 <![CDATA[ >= ]]>
<= 的写法 <![CDATA[ <= ]]>
select sc_grade, case
when sc_grade <![CDATA[ >= ]]> 0 and sc_grade <![CDATA[ < ]]> 60 then '不及格'
when sc_grade <![CDATA[ >= ]]> 60 and sc_grade <![CDATA[ <= ]]> 70 then '及格'
when sc_grade <![CDATA[ > ]]> 70 and sc_grade <![CDATA[ <= ]]> 80 then '良好'
when sc_grade <![CDATA[ > ]]> 80 and sc_grade <![CDATA[ <= ]]> 90 then '中等'
when sc_grade <![CDATA[ > ]]> 90 and sc_grade <![CDATA[ <= ]]> 100 then '优秀'
else '其他' end as grade_rank
from t_student_course where sc_date=#{sc_date} and course_id=#{course_id}
原博客位置:(14条消息) MyBatis中xml文件中的大于 大于等于 小于 小于等于 写法_Clancye的博客-CSDN博客_xml 小于等于