当前位置:首页 > 文章列表 > 数据库 > MySQL > 记录平时开发的一些问题(二)

记录平时开发的一些问题(二)

来源:SegmentFault 2023-02-25 11:30:48 0浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《记录平时开发的一些问题(二)》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下MySQL、Redis、Java、javascript、tomcat,希望所有认真读完的童鞋们,都有实质性的提高。

图片描述

1.为了提高用户体验,使得点击单选框圈圈旁边的文字也能把点选框选中

https://www.cnblogs.com/xiaox...

3.onload="this.height=this.contentWindow.document.body.scrollHeight" 自动获取屏幕高度,以防高度计算不一致

4.Joiner.on(",").join(list); 适用于list转string

5.基于JS实现回到页面顶部的五种写法(从实现到增强):https://blog.csdn.net/u011666...

6.echart横坐标太长导致坐标显示不完全(两种方法):https://blog.csdn.net/qq_3789...

7.top.document.location.href="";(iframe刷新父页面)

8.//将时间戳转换为时间
function timestampToTime(timestamp) {

var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
 var M = (date.getMonth()+1 

}
9.你的系统如何支撑高并发?https://juejin.im/post/5c45aa...

10.这个问题是在做公司产品的公众号时让用户每次刷到手机最低端再继续加载数据,所以要计算什么时候刷到最低端
//文档高度
function getDocumentTop() {

var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0; if (document.body) { bodyScrollTop = document.body.scrollTop; } if (document.documentElement) { documentScrollTop = document.documentElement.scrollTop; } scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop; return scrollTop;

}
//可视窗口高度
function getWindowHeight() {

var windowHeight = 0;    if (document.compatMode == "CSS1Compat") {
    windowHeight = document.documentElement.clientHeight;
} else {
    windowHeight = document.body.clientHeight;
}
return windowHeight;

}
//滚动条滚动高度
function getScrollHeight() {

var scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;
if (document.body) {
    bodyScrollHeight = document.body.scrollHeight;
}
if (document.documentElement) {
    documentScrollHeight = document.documentElement.scrollHeight;
}
scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? 
bodyScrollHeight : documentScrollHeight;    
return scrollHeight;

}
window.onscroll = function () {

//监听事件内容
if(getScrollHeight() == getWindowHeight() + getDocumentTop()){在这里写逻辑}

11.手机app可以使用以下这个方法让父页面获取子页面传来的值,也就是从A页面里点击按钮弹出B页面,在B页面点击某条数据,可以将这条数据传回父页面显示。但是在微信公众号并不支持。最终只能使用别的方法。

怎么用window.open()在当前窗口打开新的页面?
用window.open("","_self")或者window.location.replace("newurl")

然后用window.open方式 向父窗口返回值。例如:

页面A.htm 用 window.open方式弹出页面 B.htm 。
在页面B.htm上选择一个值,确定关闭窗口后将选择的这个值返回到父窗口A.htm。
A.htm得到返回的值后,给本页面上的文本框赋值。

1.在A.htm里建一个函数:

function sele(NO){ //NO为返回值

alert(NO);//可以直接赋值给表单
 var re= new Array();//如果需返回多个变量,则采用数组把各个变量分开
 re=NO.split(",");
 form1.feild1.value=re[0];
 form1.feild2.value=re[1];//form1为本面表单名,feild1、2为表单元素

}

调用window.open部分

var height = 300;
var width = 500;
var url = "UploadPicTest.aspx";

var winOption = "height=" + height + ",width=" + width + ",top=50,left=50,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,fullscreen=0";
window.open(url, window, winOption);




2.在B,htm 加以下代码

function re(NOre){

 window.opener.sele(NOre);
 window.close();"

}



12.最近做一个web开发,在做表单提交的时候,出现了类似于F5刷新页面效果的问题,极大的坑,每次点提交按钮会自动刷新,弄得没有值传到后台。(因为前台开发没有分离,所以一个js文件最少也有五六千行,出了bug很难找到问题,所以真心建议前台开发要分离开来)

问题:点击提交按钮,出现了F5刷新页面的效果

问题原因:将提交按钮button放到了form表单内

解决办法:将button按钮放到form表单外即可

解释:button按钮有两种类型,submit和button

submit类型的按钮可以在表单之内,因为这是表单提交默认的按钮,做提交事件的时候,直接就是对本表单的提交


...

button类型的按钮如果要做为提交按钮的话,就必须放在表单之外,表单一般设置一个id,做提交的时候,需要用表单的id做提交事件


...

13.HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

14.https://blog.csdn.net/ljheee/...:Redis持久化----RDB和AOF 的区别

15.https://www.cnblogs.com/xiaol...:Windows10上使用Linux子系统(WSL)

16.XSS(非法字符),CSRF(引诱用户进入某个非法网址),SYN 攻击是一种典型的 DoS/DDoS 攻击:在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.

SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

17.如果要匹配的ID或选择器不符合 CSS 语法(比如不恰当地使用了冒号或者空格),你必须用反斜杠将这些字符转义。由于 JavaScript 中,反斜杠是转义字符,所以当你输入一个文本串时,你必须将它转义两次(一次是为 JavaScript 字符串转义,另一次是为 querySelector 转义):


console.log('#foo\bar') // "#foobar"
console.log('#foo\\bar') // "#foo\bar"
document.querySelector('#foo\\bar') // 匹配第一个div元素

document.querySelector('#foo:bar') // 不匹配任何元素
document.querySelector('#foo\:bar') // 匹配第二个div

18.https://blog.csdn.net/qq_3314...:jdk8对list的各种处理实例详解,包括去重,排序,过滤,分组,统计

19.list去重可以使用set(不可重复的),treeSet(不可重复且排序)

20.最近在使用oracle数据库开发,碰到一些坑:

oracle使用hql的find方法分组查询会报错,因为hql会全部查一遍字段,oracle只允许出现在groupby后面的字段查询,所以使用searchPaginatedSQL(hql,params)

oracle使用count并且条件查询:count(decode(u.end_state, '2', 1, null))
字段名等于某个值就加一否则null

to_date('1970-1-1','yyyy-mm-dd'),oracle需要使用todate进行时间比对

oracle实体类需要创建索引@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mseq")//主键生成策略

@SequenceGenerator(name="mseq",sequenceName="SUPERVISION_MAIN_S",allocationSize=1)

在navicat中--创建序列
create sequence book_seq start with 1 INCREMENT by 1;

--创建触发器
create or replace TRIGGER book_trigger
before INSERT on BOOK
for each row
begin
SELECT book_seq.nextval into :new.BOOKID from dual;
end;

21.HashMap和Hashtable区别?

到这里我们分析了HashMap和Hashtable的原理,现在比较以下他们的区别。

不同点
继承的类不一样:HashMap继承的AbstractMap抽象类,Hashtable继承的Dictionay抽象类
应对多线程处理方式不一样:HashMap是非线程安全的,Hashtable是线程安全的,所以Hashtable效率比较低
定位算法不一样:HashMap通过key的hashCode()进行hash()得到哈希地址,数组下标=哈希地址 & (容量 - 1),采用的是与运算,所以容量需要是2的幂次方结果才和取模运算结果一样。而Hashtable则是:数组下标=(key的hashCode() & 0x7FFFFFFF ) % 容量,采用的取模运算,所以容量没要求
键值对规则不一样:HashMap允许键值为null,而Hashtable不允许键值为null
哈希表扩容算法不一样:HashMap的容量扩容按照原来的容量2,而Hashtable的容量扩容按照原来的容量2+1
容量(capacity)默认值不一样:HashMap的容量默认值为16,而Hashtable的默认值是11
put方法实现不一样:HashMap是将节点插入到链表的尾部,而Hashtable是将节点插入到链表的头部
底层结构不一样:HashMap采用了数组+链表+红黑树,而Hashtable采用数组+链表

为什么HashMap允许null键值呢,而Hashtable不允许null键值呢?这里还得先介绍一下什么是null,我们知道Java语言中有两种类型,一种是基本类型还有一种是引用类型,其实还有一种特殊的类型就是null类型,它不代表一个对象(Object)也不是一个对象(Object),然后在HashMap和Hashtable对键的操作中使用到了Object类中的equals方法,所以如果在Hashtable中置键值为null的话就可想而知会报错了,但是为什么HashMap可以呢?因为HashMap采用了特殊的方式,将null转为了对象(Object),具体怎么转的,这里就不深究了。

相同点
实现相同的接口:HashMap和Hashtable均实现了Map接口
负载因子(loadFactor)默认值一样:HashMap和Hashtable的负载因子默认都是0.75
采用相同的方法处理哈希冲突:都是采用链地址法即拉链法处理哈希冲突
相同哈希地址可能分配到不同的链表,同一个链表内节点的哈希地址不一定相同:因为HashMap和Hashtable都会扩容,扩容后容量变化了,相同的哈希地址取到的数组下标也就不一样。

今天带大家了解了MySQL、Redis、Java、javascript、tomcat的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
【学习小组】成立第一天记录【学习小组】成立第一天记录
上一篇
【学习小组】成立第一天记录
技术分享 | innodb-cluster 扫盲-安装篇
下一篇
技术分享 | innodb-cluster 扫盲-安装篇
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    10次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    38次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码