Js判断页面是关闭还是刷新

  1. 根据页面关闭时的事件判断
    https://blog.csdn.net/u010175124/article/details/9092899
    页面加载时只执行onload
    页面关闭时只执行onunload
    页面刷新时先执行onbeforeunload,然后onunload,最后onload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<html> 
<head>
<title>判断页面是关闭还是刷新</title>
</head>

<body onunload="fclose();" onload="fload();" onbeforeunload="bfunload();">
<script language="javascript">
var s = "test";
function fclose()
{
if(s=="no")
alert(’unload me!=’+s+’这是刷新页面!’);
else
alert(’这是关闭页面’);
}

function fload()
{
alert("load me!="+s);
}

function bfunload()
{
s = "no";
}
</script>
</body>
</html>
  1. 根据 performance.navigation.type判断
    https://www.zhihu.com/question/29036668
    0表示从链接进去,1表示刷新

  2. 根据window.name判断
    https://www.zhihu.com/question/29036668

    type
    1
    2
    3
    4
    5
    6
    7
          window.onload = function() {
    if (window.name == "") { // 直接进来才是空的
    alert('直接进来');
    }
    window.name = "test"; // 刷新当前页面,window.name并不会销毁
    };
    </script>

JAVA面试题

为什么很多编程语言中数组都从0开始编号:

从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。

数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。

说数组起始编号非 0 开始不可。所以我觉得最主要的原因可能是历史原因。

C 语言设计者用 0 开始计数数组下标,之后的 Java、JavaScript 等高级语言都效仿了 C 语言,或者说,为了在一定程度上减少 C 语言程序员学习 Java 的学习成本,因此继续沿用了从 0 开始计数的习惯。实际上,很多语言中数组也并不是从 0 开始计数的,比如 Matlab。甚至还有一些语言支持负数下标,比如 Python。

JVM标记清除算法:

大多数主流虚拟机采用可达性分析算法来判断对象是否存活,在标记阶段,会遍历所有 GC ROOTS,将所有 GC ROOTS 可达的对象标记为存活。只有当标记工作完成后,清理工作才会开始。

不足:1.效率问题。标记和清理效率都不高,但是当知道只有少量垃圾产生时会很高效。2.空间问题。会产生不连续的内存空间碎片。

Canal的基本使用

参考 https://www.51cto.com/article/626708.html

安装Mysql 8

1
2
3
4
5
6
7
8
9
10
11
12
13
docker pull mysql/mysql-server:latest
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=qxiu2022 -d mysql/mysql-server

进入mysql docker容器
docker exec -it 123456 /bin/sh
GRANT ALL PRIVILEGES ON *.* TO 'abc'@'%';
#设置可以远程连接
ALTER USER 'abc'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123';
flush priviles;

#修改容器的系统时间
docker cp /usr/share/zoneinfo/Asia/Shanghai docker_container_id:/etc/localtime
docker restart docker_container_id

Canal-Server

通过docker镜像的方式启动Cannal-Server还有点问题,下边通过下载 canal-canal.deployer-1.1.7-SNAPSHOT.tar.gz ,然后通过命令行的方式启动

Read More

Elasticsearch跨集群备份

概述

目前7.0以上版本跨集群备份的方式有很多,例如elasticsearch-dump,reindex,snapshot,logstash。

方案对比

方案 elasticsearch-dump reindex snapshot logstash
基本原理 逻辑备份,类似mysqldump将数据一条一条导出后再执行导入 reindex 是 Elasticsearch 提供的一个 API 接口,可以把数据从一个集群迁移到另外一个集群 从源集群通过Snapshot API 创建数据快照,然后在目标集群中进行恢复 从一个集群中读取数据然后写入到另一个集群
网络要求 集群间互导需要网络互通,先导出文件再通过文件导入集群则不需要网络互通 网络需要互通 无网络互通要求 网络需要互通
迁移速度 一般
适合场景 适用于数据量小的场景 适用于数据量大,在线迁移数据的场景 适用于数据量大,接受离线数据迁移的场景 适用于数据量一般,近实时数据传输
配置复杂度 中等 简单 复杂 中等

Read More

hadoop集群RM和ZK异常的解决

修改了Flume的配置,然后需要将有过期配置的服务重启了一下,然后集群上有些服务就异常了。

Yarn服务异常: 2个ResourceManager同时处于standby状态

首先yarn服务异常,2个ResourceManager (分别为hadoop101和hadoop102) 同时处于standby状态。然后根据stackoverflow上的解释,使用如下命令

1
yarn resourcemanager -format-state-store

在hadoop101上以hdfs用户执行,过了1分钟,问题仍旧没有解决,2个ResourceManager仍然同时处于standby状态。

Read More

Parse_url函数 (Spark SQL)

from https://docs.microsoft.com/zh-cn/azure/databricks/sql/language-manual/functions/parse_url

从 url 中提取一部分。

语法

1
parse_url(url, partToExtract [, key] )

参数

  • url:一个 STRING 表达式。
  • partToExpract:一个 STRING 表达式。
  • key:一个 STRING 表达式。

    返回

    字符串。

partToExtract 必须是以下各项之一:

  • ‘HOST’
  • ‘PATH’
  • ‘QUERY’
  • ‘REF’
  • ‘PROTOCOL’
  • ‘FILE’
  • ‘AUTHORITY’
  • ‘USERINFO’
    key 区分大小写。

如果未找到请求的 partToExtract 或 key,则返回 NULL。

示例

SQL

1
2
3
4
5
6
SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST');
spark.apache.org
SELECT parse_url('http://spark.apache.org/path?query=1', 'QUERY');
query=1
SELECT parse_url('http://spark.apache.org/path?query=1', 'QUERY', 'query');
1

Clickouse新特性调研 Release v21.11, 2021-11-09

向后兼容变化

  • 改变了SQL/JSON函数中json_path和json参数的位置。
  • 移除了MergeTree表的write_final_mark设置,这个值总是为true,新的版本会兼容所有的表,不需要其他的设置。
  • 移除了bayesAB函数。
  • 如果你已经开始使用clickhouse-keeper 特性,可以看一下这条内容。现在ClickHouse Keeper快照默认使用ZSTD编码的方式进行压缩,而不再是LZ4块压缩,可以通过compress_snapshots_with_zstd_format 设置来关闭此特性(在所有的集群副本上保持设置一致)。一般都是向后兼容的,但是也有可能出现不兼容的情况,当一个新节点向不能读取ZSTD格式快照的旧节点发送快照的时候(在恢复的时候可能会发生)。

Read More