年度问题日结,将今年每天遇到的问题做一个记录: <月.日 问题>
6.7 问题
Hashmap寻找的时间复杂度
hashmap的实现是”数组+链表”的形式,
1
2
3
41. 先根据key值计算出hash值以及h值(h值是java实现中处理得到的更优的index索引值)
2. 查找table数组中的h位置,得到相应的键值对链表
3. 根据key值,遍历键值对链表,找到相应的键值对,
4. 从键值对中取出value值。Golang 反射将数字转成float64
value.(float64)
Golang map判断是否有键值
if val,ok:=map[key];ok{
// 有值
}
5.25 问题
数据库无记录时插入,有记录时(设置的主键重复)更新
insert into city_th_tbl (id,name_col) values (8,'名字') on duplicate key update name_col='名字1';
,当id=8插入的时候有重复的值的时候,将name_col
更新为名字1
,只针对于MySQL。将
docker info
之后显示的data space 修改大小truncate -s 200G /var/lib/docker/devicemapper/devicemapper/data
一键停止所有正在运行的docker容器,
docker stop $(docker ps -a -q)
,开启:docker start $(docker ps -a -q)
grep “查的内容” “文件位置” -C 10
; 使用grep查找的时候把匹配内容的上下10行也显示出来
5.18 问题
查看linux centos 某个软件是否安装
答案:
rpm -qa | grep software
启动某个软件
答案: 设置开机启动
sudo systemctl enable docker
,设置立即启动sudo systemctl start docker
- 查看系统内核信息
uname -a
ubuntu安装软件出错,“Ubuntu unable to locate package”
答案 `先更新 apt-get update ;
之后 apt-get upgrade`
vim 替换
答案:
:s/old/new/g
,替换一行的所有old为new.:
命令模式,s
是指本行,g
是指所有查看磁盘大小
答案:
df -lh
,fdisk -l
virtual box 安装Ubuntu,之后使用本地命令行登录。
答案: Ubuntu 装一个openssh-server . vb里面加一个hostonly-adapter. 之后将nat 端口转发
查看当前电脑时区
答案:
date
使用nginx ,实现多个tomcat 负载均衡。
原文地址;参考了这个博客,我也实现了。 不过我做了一些小改动。在tomcat上我直接
docker pull tomcat
镜像,之后根据tomcat镜像生成的容器,来做的实现。没有那么麻烦。nginx 主要在http模块增加了配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server{
listen 80;
server_name localhost;
location / {
proxy_pass http://blance;
}
}
upstream blance{
server localhost:3280 weight=5;
server localhost:3380 weight=5;
}
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
5.17 问题
怎么给mysql 唯一key 取名
答: index,key在MySQL指代的是同一个东西,不过在key有一个unique key 它会限制多行的该列不会有相同值。
1
2
3
4
5
6
7
8
9
10-- 建表语句
create table language_tbl(
id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '语言的数字id',
language_code varchar(20) NOT NULL COMMENT '语言显示名:en_US;zh_CN;zh_TW;ko_KR;th_TH',
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
last_modify_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
flag int(1) NOT NULL DEFAULT '0' COMMENT '',
PRIMARY KEY (id),unique key `idx_language_code_flag` (language_code,flag)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
可以看到我们自定义的unique key 名为idx_language_code_flag
,可以用show index from language_tbl;
查看一下表的index。另外如果表已经建立好:create index idx_language_code on language_tbl(language_code);
,其中idx_langauge_code是自定义的名字。
删除表
答:
drop table if EXISTS language_tbl;
删除表,包括表数据。`delete from language_tbl;`删除表的所有已有数据。
当访问一个URL时报404,nginx/1.10.2,这种情况查看 nginx 日志判断看是否Nginx访问到了。
答: 查看日志,第一步要确定我们要查看的那个日志在那个位置,进入到/etc/nginx
目录使用grep
,找到log目录。1
2
3
4grep 'log' nginx.conf
error_log /var/log/nginx/error.log warn;
log_format main '$remote_addr - $remote_user [$time_local] $request_time "$request" '
access_log /var/log/nginx/access.log main;
5.15 问题
Mysql 使用
group by
是否可以将多行中同列的不同值合并成一条答: 主要使用group_concat()函数,可以将同组id相同的值合并到一个值当中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20SELECT genenic_id,
group_concat(LANGUAGE)
FROM genenic_language_tbl
GROUP BY genenic_id;
SELECT genenic_id,
group_concat(LANGUAGE separator ';')
FROM genenic_language_tbl
GROUP BY genenic_id;
SELECT genenic_id,
group_concat(LANGUAGE
ORDER BY id DESC)
FROM genenic_language_tbl
GROUP BY genenic_id;
SELECT genenic_id,
group_concat(DISTINCT LANGUAGE)
FROM genenic_language_tbl
GROUP BY genenic_id;一条SQL更新两个表
答:
update tbl_name1 a, tbl_name2 b set a.xx='',b.xx='';
这样有个不好的地方。这两个表的所有字段都会更新。所以这种情况的使用场景是两个表有唯一主键关联,一定要仔细检查。1
2
3
4
5
6
7
8
9begin;
update city_ch_tbl a,city_en_tbl b
set a.desc_col = 'adsf',b.desc_col='testsss2'
where a.id = 2 or b.id=21231;
rollback;
commit;
update city_tbl a, city_detail_tbl b
set a.displayType_col=1 ,b.publish_status=?, a.publish_time=current_timestamp
where a.id =b.cityId_col and a.id=?redis Key 加密登录
答:如果redis配置了密码,修改了redis.cnf 的
requirepass chen
;1
2src/redis-server redis.conf
auth password chen
5.13 问题
mysql 替换数据库的某些值
答案: 使用MySQL的
replace()
函数
update city_en_tbl set desc_col = REPLACE(desc_col, 'ne', 'ne1') where id = 3;
mysql 字符相加
答: 使用MySQL的
CONCAT(str1, str2, str3, ...)
5.12 问题
- mysql 增加唯一键
alter table tbl_name add unique key(col_name)
alter table city_en_tbl add unique key(cityId_col)
nginx 反向代理
robots.txt是啥?
谷歌爬虫会根据robots的文件内容确定哪些爬,哪些不爬,可以减少网站的带宽。
Linux 查看软连接
Linux增加软连接为
ln -s afile bfile
,查看为ls -il
- nginx site-ennable
## 5.10 问题
Curl 命令
curl [option] [url]
,平常使用最多的是前后端分离后,我们使用post,get请求某个接口。
1 | -- 头信息 |