仅支持*MergeTree 、 Merge及Distributed表
改变表结构:
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ... 添加列ADD COLUMN name [type] [default_expr] [AFTER name_after] 如指定after name_after,列被添加到指定的后面,否则列添加到表尾,不能再表首添加列
添加列金改变表结构,alter后数据不会添加到硬盘,读取的时候没有数据则去默认值
DROP COLUMN name立即删除 MODIFY COLUMN name [type] [default_expr]改变列的类型或默认表达式,改变类型数据跟着改变:借助临时表 alter锁住表,读写alter不能竞争同一把锁
不会改变字表,分布式表的alte需要每个服务器都执行一遍
https://clickhouse.yandex/docs/zh/query_language/alter/ 看不下去了【笑(wu)哭(nai)】
Spring Boot启动后访问首页,发现游览器报错,如图:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Jan 23 17:03:31 CST 2019
There was an unexpected error (type=Internal Server Error, status=500).
Exception parsing document: template="login", line 6 - column 3
还好不是404错误,这种一看就是语法错误。从前台提示来看只知道是login.html这个页面报错,第六行第三列是head标签这里没问题啊。
既然是500服务器内部错误,我们就看下后台有没有错误日志打印,看下控制台
org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_181]
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) ~[na:1.8.0_181]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) [na:1.8.0_181]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) [na:1.8.0_181]
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472) [na:1.8.0_181]
果然,使用meta标签的只有第4行。原来我使用的Spring Boot是1.
Data truncation: Data too long for column ‘novel’ at row 1
解决方法:将text类型改为Longtext
相信在我们Java程序猿中绝大多数的人都知道,Java垃圾回收器回收对象的条件就是在对象失去引用的情况下才会被垃圾回收器回收,但是谈论到计算对象是否被引用的算法以及引用对象的种类可能就会有一部分人不是了解的太具体。下面就简单介绍一下计算对象是否失去引用的算法以及强、软、弱、虚四种引用类型。
可达性分析算法 在主流的商用语言中(Java、c#等)都是用可达性分析算法来判定对象是否存活(也就是是否有引用指向这个对象)。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这个节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有引用链相连(就是从GC Roots不能到达这个对象)时,则证明此对象是不可用的(对象失去引用)。如图所示,对象object 5、object 6、object 7虽然互相有关联,但是他们到GC Roots是不可到达的,所以他们将会被判定为可以回收的对象。
在Java语言中,可作为GC Roots的对象包括以下几种:
1、虚拟机栈(栈帧中的本地变量表)中引用的对象。
2、方法区中类静态属性引用的变量。
3、方法区中常量引用的对象。
4、本地方法栈中JNI(Native方法)引用的对象。
Java中引用的分类 在jdk 1.2之后,Java堆引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种,这四种引用强度依次减弱。
1、强引用:强引用就是在程序代码中普遍存在的,类似“Student student = new Student()”,这类的引用,只要引用还在,垃圾回收器就永远不会回收被引用的对象。
2、软引用:软引用是用来描述一些还有用但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列入到回收范围之内进行二次回收。如果这次回收之后还没有足够的内存,才会抛出内存溢出异常。
3、弱引用:弱引用也是用来描述非必须对象的,但是它的强度要比软引用弱一些,被弱引用关联的对象只能生存到下次垃圾回收之前。当垃圾回收器工作时,不管内存是否足够都会回收掉被弱引用指向的对象。
4、虚引用:虚引用是最弱的一种引用关系。一个对象是否会被回收与其是否被虚引用所指向没有关系,虚引用并不能改变对象的生存时间,我们也无法通过虚引用获得对象的实例。为一个对象设置虚引用的唯一目的就是在回收这个对象的时候会得到一个系统通知。
本文主要是用资源扫描的方式,在运行项目时将本地properties配置文件以bean的方式加载到项目中,
test.properties配置文件中的内容为:
parameter1=aaaaaaa parameter2=bbbbbbb parameter3=ccccccc parameter4=参数4 扫描配置文件并加载的代码如下:
package com.sinosoft.hx.boc.service; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; @Configuration public class TestConfig { @Bean public Map loadConfig() throws UnsupportedEncodingException { ClassPathResource classPathResource = new ClassPathResource("test.properties"); Properties prop = new Properties(); InputStream in = null; try { in = new BufferedInputStream(classPathResource.getInputStream()); prop.load(new InputStreamReader(in, "utf-8")); } catch (IOException e) { e.printStackTrace(); System.out.println("加载本地配置文件ICBCCommonConfig.properties失败"); }finally { if (in !
win10 原生播放器不支持 的编码格式 需要用 vlc media player 才能播放
谷歌搜vlc media player download for filehippo 下载安装
public String excelDateUtil(int dataNum) {
int year = 1900;
while (true) {
if (dataNum > 365) {
if (year % 4 == 0 || year % 100 == 0 && year % 400 != 0) {
dataNum = dataNum - 366;
} else {
dataNum = dataNum - 365;
}
year += 1;
} else {
if (year % 4 == 0 || year % 100 == 0 && year % 400 !
1 padding 的操作就是在图像块的周围加上格子, 从而使得图像经过卷积过后大小不会变化,这种操作是使得图像的边缘数据也能被利用到,这样才能更好地扩张整张图像的边缘特征.
公式表示如下:
2 卷积核中size的选择可能会导致input中的某几行(或者最后 几行)没有关联起来,这个可能是因为我们使用的模式是valid,而不是full(tensorflow中也叫做same模式,不过这个还没研究,下一步好好看一看.........)
如果想要充分的利用input信息,那么就要非常依赖于用户对于padding和stride等的参数设置,对于pytorch用户来说需要知道 卷积核的选取与设置是怎么样影响结果的.(我可能还不怎么清楚)
输入信号的格式:(N, C, H, W),其中N表示Batch size,C表示channel个数,H,W分别表示特征图的高和宽
在nn.Conv2d中padding实在卷积操作之前的, 可以进行补0操作,也可补其他的.
其中padding补0 的策略是四周都补,如果padding=1,那么就会在原来输入层的基础上,上下左右各补一行,如果padding=(1,1)中第一个参数表示在高度上面的padding,第二个参数表示在宽度上面的padding.如下图:
但是填充完值不是0 ,而是0.9862,是因为其加上了偏置值0.9862
3 pytorch中默认的padding类型是vaild,
拓展:卷积的三种模式 卷积的三种模式: full, same , valid
1 full mode
橙色部分为image,蓝色部分为绿薄核,full就是从滤波核和image刚开始相交就进行卷积,白色的部分填充为0
2 same mode
当filter的中心和image的边角重合时,开始做卷积运算,此时的filter范围比full模式小了一圈.
另外一层含义是,卷积过后输出的feature map尺寸与原图像的大小一致. (不过,大小的问题与卷积步长也有关系.)
same模式是比较常见的模式,因为在这种模式中,在图像前向传播的过程中可以让特征图的大小保持不变
3 valid mode
当filter全部在image中间的时候,进行卷积运算,可见,filter的移动范围更加小了
注意:卷积层和池化层中都会加入padding操作, (1) 池化层的作用体现在降采样,保留图像的显著特征,降低图像维度,使得特征图变小,简化网络.,增大kernel的感受野, 同时,也会提供一些旋转不变性. 但是特征图变小,有可能会影响到网络的准确度(措施:可以通过增加特征的深度来弥补,如深度变成原来的2倍)
(2) 卷积会带来的两个问题(1,卷积运算后,输出图像的尺寸会缩小; 2 越是边缘的像素点,对输出的影响就越小,卷积的时候移到边缘就结束了,但是中间的像素点有可能会参与多次计算,但是边缘的像素点可能只参与一次计算....因此可能会丢失边缘信息.)
padding的用途: 保持边界信息;可以对有差异的图片进行补齐,使得图像的输入大小一致;在卷积层中加入padding ,会使卷基层的输入维度与输出维度一致; 同时,可以保持边界信息 ..
字符串列表定义方法1:
a=(f1 f2 f3 f4)
for i in ${a[*]}#遍历每一个列表值
for i in ${a[@]}#等价与上一句
实例:
#!bin/bash
a=(f1 f2 f3 f4)
for i in ${a[*]}; do
echo ”$i“
if [ "$i" == "f1" ]; then#判断字符串是否相等,注意前后要有空格,否则变为赋值语句
echo ”f1 finded“
else
echo "NOTFOUND"
fi
done
字符串列表定义方法2:
a[1]=f1
a[2]= f2
a[3]= f3
a[4]= f4
实例2:
#!bin/bash
a[1]=f1
a[2]=f2
a[3]=f3
a[4]=f4
for i in ${a[*]}; do
echo ”$i“
if [ "$i" == "f1" ]; then
一个插件一时爽,一堆插件一直爽。代码千万条,整洁第一条,代码不规范,产品两行泪。
目录 实用插件
.ignore
Alibaba Java Coding Guidelines
Alibaba Cloud Toolkit
ASM Bytecode Outline
CamelCase
CodeGlance
code helper.generator
FindBugs-IDEA
GenerateAllSetter
GenDaoCode
GsonFormat
Grep Console
IDEA Mind Map
JRebel(收费)
Lombok plugin
Maven Helper
Mybatis plugin(收费)
MyBatis Log Plugin
MyBatisCodeHelperPro
P3C
SonarLint
stacjoverflow
VisualVM Launcher
美化界面
Material Threme UI
Background image Plus
active-power-mode
Nyan progress bar
Rainbow Brackets
Translation
其他还没试过的插件
Gitee
IDE Features Trainer Key promoter String Manipulation
CheckStyle-IDEA
FindBugs-IDEA
MetricsReloaded
oracle表空间不足错误代码:ORA-01688: unable to extend table 等;
查看剩余表空间的大小: SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
---error: duplicate attribute.
估计很多人遇到后都不知道怎么办,但一直提示layout文件有问题,所以就尝试将跟布局的width和height属性去掉,然后就没有这个问题了
---有ViewPager的界面必须为ViewPager设置一个id
在没有使用DataBinding的时候,通常都会为ViewPager设置一个id.有一次在使用的时候结合DataBinding,所以就没有设置id,所以就抛出必须设置id异常.
---找不到BR类
在使用DataBinding的时候,偶尔需要用到BR类,然而有时要用的时候总会找不到.
这个时候各种clean,rebuild都没用,检查layout文件的代码也没发现问题.在生成的DataBinding类里面把BR类复制出来编译不会报错,运行的时候发现报错了.所以最后想到了用反射根治这个问题,虽然这种方式并不方便,但也算是解决了这个问题.
public static int getBrField(String fieldName){ int fieldId = 0; try{ Class brClass = Class.forName(MyApplication.getInstance().getPackageName() + ".BR"); Object brObject = brClass.newInstance(); fieldId = (int)(brClass.getField(fieldName).get(brObject)); }catch(Exception e){ e.printStackTrace(); } return fieldId; } 注意: 使用了反射之后有开启代码混淆的话必须在混淆规则忽略混淆 -keep class 你的包名.BR { *;}
---没办法使用&&符号的问题
相信有些人可能遇到这个问题,其实不知没办法在@{}里面使用 & 符号,在双引号里面也没办法使用.我一开始也没反应过来,后来
android:text="&" 这里试了一下才想起来这里要用转义,遇到这个问题的人估计很少在layout文件里面写 & 符号,所以一时半会没反应过来.还有,<> 这2个符合也需要使用转义.
常用转义表
学习DataBinding时做的笔记
1.查询系统是否安装了apache : rpm -qa | grep httpd
2.查询apache相关软件包:yum search httpd
3.安装apache:yum install httpd
4.启动apache:service httpd start
5.浏览器访问,浏览器地址栏输入 http://ip:80/,ip替换为linux服务器ip,发现访问不了。
5.1查询防火墙允许访问哪些端口:firewall-cmd --list-ports 5.2开启80端口的访问权:firewall-cmd --permanent --zone=public --add-port=80/tcp
5.3修改后重启服务使生效:systemctl restart firewalld.service
6.重新访问,如下图所示,搞定!
在CentOS中做LVM时 pvcreate /dev/sdb1创建物理分区报错,在网上查了下,看别人都是multipath的问题,照着操作一番,我这跟他们还不一样。我这才学的linux分区,创建虚拟机没几天,就格式化文件系统,挂载到了/opt目录,然后我想是不是挂载导致的。然后就去挂载,命令如下:
umount /opt
vim /etc/fstab
mount -a
完了重新执行 pvcreate /dev/sdb1,嘿,提示信息变了,
WARNING: ext3 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]:
翻译翻译,在/dev/sdb1上发现了ext3签名,是否要擦除?原来是我使用ext3格式化文件系统,果断输入y呀,好了,创建物理分区成功
Wiping ext3 signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
至于为啥呢?我也不知道,继续学习吧,发出来仅供参考。
与concat有关的函数有三个:
1、concat()
2、concat_ws()
3、group_concat()
concat(str1,str2,str3,…) 连接参数的函数,返回结果为连接参数的字符串。如果有一个参数为NULL,则返回的结果为NULL。
concat(‘a’,‘b’,‘c’) ---- ‘abc’
concat(’‘a,null,’'c)----null
concat_ws(‘分隔符’,str1,str2,…) concat()的一个特殊形式,表示concat with separator,两个参数之间加上特定的分隔符。返回的是用指定分隔符连接参数的字符串。如果分割符为null,则返回null,参数为null,则忽略该参数。
concat_ws(’’/,’‘2018,’‘12,’'19)----2018/12/19
concat_ws(’’:,’'22,‘47’,null)----22:47
concat_ws(null,’'22,‘47’)----null
group_concat(str1,[order by str3],[separator ‘分隔符’]) 把相同组的字符串以特定分隔符连接为一行。具体用法为:
数据
id|name
1|bob
1|anna
1|helen
2|tom
2|baby
2|tom
按id分组,把name连接为一行
select id,group_concat(name)
1|bobannahelen
2|tombabytom
按id分组,把name连接为一行,并按name升序
select id,group_concat(name order by name asc)
1|annabobhelen
2|babytomtom
按id分组,name去重并连接为一行,按name升序,用逗号分隔
select id,group_concat(distinct name order by name asc separator ‘,’)
1|anna,bob,helen
2|baby,tom
在我添加agen节点的时候报错, 查看日志是报错信息如下 查看agent 节点日志
tail -f /opt/cloudera-manager/cm-5.8.0/log/cloudera-scm-agent/cloudera-scm-agent.log [18/Dec/2018 13:53:44 +0000] 1686 MainThread agent ERROR Failed to handle Heartbeat Response: {u'firehoses': [{u'roletype': u'SERVICEMONITOR', u'rolename': u'mgmt-SERVICEMONITOR-8b7
30cb62f5e53e3e0421dd1c6d53975', u'port': 9997, u'report_interval': 60, u'address': u'master'}, {u'roletype': u'HOSTMONITOR', u'rolename': u'mgmt-HOSTMONITOR-8b730cb62f5e53e3e0421dd1c6d53975',
u'port': 9995, u'report_interval': 60, u'address': u'master'}], u'rm_enabled': False, u'client_configs': [], u'create_parcel_symlinks': True, u'server_managed_parcels': [], u'extra_configs':
None, u'host_collection_config_data': [{u'config_name': u'host_network_interface_collection_filter', u'config_value': u'^lo$'}, {u'config_name': u'host_disk_collection_filter', u'config_valu
e': u'^$'}, {u'config_name': u'host_fs_collection_filter', u'config_value': u'^$'}, {u'config_name': u'host_log_tailing_config', u'config_value': u'{}\n'}, {u'config_name': u'host_dns_resolut
概述 const 是一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器哪些值是保持不变的,如果我们的代码试图去修改,编译器会给出错误提示。const可以使用在很多地方,下面是我对const进行的梳理。
1、const修饰变量 修饰变量时,表示此变量的值是只读的,不能被修改,因为不能被修改所以必须初始化。如:
const int abcd = 1234; const int ival; //编译出错 2、const修饰指针或引用 主要看const在* 的左边还是右边。如果const在*的左边,则表示指针指向的内容为常量,如
const int *ptr; //*ptr为常量; int const *ptr; //*ptr为常量; 如cosnt 在*的右边,则表示指针本身为常量,如
int* const ptr; //ptr为常量 两者的结合就是既不能改指针,又不能改内容:
cosnt int* const ptr; //两者都不能修改 引用和指针,两者差不多,唯一的区别是引用的定义就不能对引用进行重新绑定,所以只有不能修改引用绑定值的逻辑。
int a = 123; const int& b = a; //不能通过b进行修改 3、const修饰函数 因为非成员函数上不允许修饰符,所以对于非成员函数,只有修饰参数和返回值。如:
int Add(int x, int y) const //编译器会报错,error C2270: “Add”: 非成员函数上不允许修饰符 { return x + y; } const修饰函数参数,则函数内部不能进行改变,函数外部并不关心,与修饰变量和指针规则的一样。如
int func( const int x) { return ++x; //编译时报错 } const修饰函数返回值,则返回值不能进行修改,与上面一样。
下载最新版本的android studio 3.2
Open On-Chip Debugger 0.10.0-dev-00011-g46c94c8 (2018-09-06-08:38) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Could not determine executable path, using configured BINDIR. none separate Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD adapter_nsrst_delay: 100 adapter speed: 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v25 API v2 SWIM v4 VID 0x0483 PID 0x3748 Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748 Info : using stlink api v2 Info : Target voltage: 2.
关于Mapper.xml映射语句中什么时候用"#"什么时候用"$",已经有很多人做过总结,我最近在写项目时仍然遇到了一点问题,所以在这里结合项目文档和案例,再做一下总结,也作为个人的笔记,在这里再总结下。
一、先看一下在mybatis api中关于"#"和"$"的描述 1、"#"
图 1来自于mybatis api “Mapper XML文件”章节, 简单来说"#"在编译时使用"?"占位符标记,可以有效防止参数注入,相当于我们使用JDBC操作时的PreparedStatement。
图1
2、"$" 图2同样来自于mybatis api “Mapper XML文件”章节,意思是直接把参数拼接到SQL中执行相当于JDBC操作时的Statement
图2
二、结合案例具体说明"#"和"$" 的区别。 1、参数作为非SQL关键字传递
<insert id="addUser" parameterType="User">
insert into users values(default, ${username}, ${password}, ${photo});
</insert>
该语句执行报错,通过日志分析,
[19:32:41.422] [DEBUG] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) ==> Preparing: insert into users values(default, test, 123456, c9ae464f-348d-491d-a162-a9624c99f73b); [19:32:41.479] [DEBUG] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) ==> Parameters: Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'test' in 'field list'
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'test' in 'field list'] with root cause