makefile的重要性
(1)makefile是一项通用技能,我平时用MDK编辑环境编程,基本上没有接触过makefile。但是仍然晓得makefile的重要性,因为我平时找到的一些很好的开源源代码例子都是用makefile编译的,如果我想要了解这些优秀的源代码,那么比如要会makefile。
(2)makefile看起来很高端,这个也是个重要的作用。尽管事实上比MDK容易犯错,也更加不方便。
makefile的历史渊源
根据Makefile可见,makefile来源于UNIX
分析一个比较简单的makefile
include ../../py/mkenv.mk
# qstr definitions (must come before including py.mk)
QSTR_DEFS = qstrdefsport.h
# include py core make definitions
include $(TOP)/py/py.mk
CROSS_COMPILE = arm-none-eabi-
INC += -I.
INC += -I$(TOP)
INC += -I$(BUILD)
CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion
CFLAGS = $(INC) -Wall -Werror -std=c99 -nostdlib $(CFLAGS_CORTEX_M4) $(COPT)
#Debugging/Optimization
ifeq ($(DEBUG), 1)
CFLAGS += -O0 -ggdb
else
CFLAGS += -Os -DNDEBUG
解决高德地图label添加的点击事件在移动端无效
近日工作中需要用到高德地图在PC端和移动端同时适配的需求,在PC端撸代码和调试一切顺利,但是在将项目在平板中测试
时,发现绑定在label中的click事件无法触发;通过各种调试发现应该是高德在移动端的marker上屏蔽了click事件;
原代码如下:
self.pointers[item].setLabel({ //label默认蓝框白底左上角显示,样式className为:amap-marker-label offset: new AMap.Pixel(25, 5), //右侧 zIndex: 99, content: "<div class='map-label'><span class='map-label-name'>" + self.allData.filter(b => b.seqno == item)[0].shortTitle + "</span><a href='javascript:void(0)' class='map-label-link' id='label-" + item + "' onclick='clickLink(this, event)' seqno='" + item + "'><i class='iconfont icon-arrow-double-right'></i></a></div>" }); 解决方案:手动给label添加touchstart事件
let btn = document.getElementById("label-" + item); btn.addEventListener( "touchstart", function(event) { self.$router.push({ path: "/screenProject", query: { seqno: item } }); }, false ); 特此记录一下踩坑过程!
几篇合集。
1 单例模式“双重检查锁定Double-Checked Locking”线程安全问题
https://blog.csdn.net/wabiaozia/article/details/84723899
2 主题:用happen-before规则重新审视DCL
https://blog.csdn.net/wabiaozia/article/details/84727407
3 Double-checked locking: Clever, but broken
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#dcl
4 Does the new memory model fix the "double-checked locking" problem?
https://blog.csdn.net/wabiaozia/article/details/84839566
注:
1 1和 3.4三篇写的比较早,有些问题已经处理更新了。可以看文章下的一些评论。
2 volatile屏蔽指令重排序的语义在JDK1.5中才被完全修复,此前的JDK中及时将变量声明为volatile,也仍然不能完全避免重排序所导致的问题(主要是volatile变量前后的代码仍然存在重排序问题),这点也是在JDK1.5之前的Java中无法安全使用DCL来实现单例模式的原因
3 在java5之前对final字段的同步语义和其它变量没有什么区别,在java5中,final变量一旦在构造函数中设置完成(前提是在构造函数中没有泄露this引用),其它线程必定会看到在构造函数中设置的值。而DCL的问题正好在于看到对象的成员变量的默认值,因此我们可以将LazySingleton的someField变量设置成final,这样在java5中就能够正确运行了。
以下是原文: 转载请标明连接:https://blog.csdn.net/wabiaozia/article/details/84723899
译文原链接:http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
Signed by: David Bacon (IBM Research) Joshua Bloch (Javasoft), Jeff Bogda, Cliff Click (Hotspot JVM project), Paul Haahr, Doug Lea, Tom May, Jan-Willem Maessen, Jeremy Manson, John D. Mitchell (jGuru) Kelvin Nilsen, Bill Pugh, Emin Gun Sirer
想测试一下安卓ndk对全局变量的使用,写了一个测试类:
static int a = 0;//标记1 static int b = 0;//标记2 void on_exit(); class app_test { public: int *p; app_test() : p(null) { using namespace std; APP_WARN("app test init ------------------------%d, %d, %p", a, b, p); atexit(on_exit);//这个是c函数,程序结束的时候执行 if(!p){p = (int*)malloc(4); } } ~app_test() { APP_WARN("~~~~~~~app test dispose~~~~~~~"); if(p){ free(p); p = null; } a = 1;//如果执行了析构,a标记1 } }; static app_test apptest; void on_exit() { APP_ERROR("app on_exit --------------------------"); if(apptest.p){ free(apptest.p); apptest.p = null; } b = 1;//atexit()执行 如果执行了atexit(),b标记1 } 而测试结果发现,apptest只在程序第一次启动的时候构造。之后按返回、主页之后再运行,构造函数均不再执行。除非强制结束进程,但析构和atexit()也都没有执行。
1、概述 我们用到的库函数基本上都属于命名空间std的,在程序使用的过程中要显示的将这一点标示出来,如std::cout。这个方法比较烦琐,而我们都知道使用using声明则更方便更安全。
这个我们程序员肯定都知道了,今天突发奇想就想对using整理一下。
2、命令空间的using声明 我们在书写模块功能时,为了防止命名冲突会对模块取命名空间,这样子在使用时就需要指定是哪个命名空间,使用using声明,则后面使用就无须前缀了。例如:
using std::cin; //using声明,当我们使用cin时,从命名空间std中获取它 int main() { int i; cin >> i; //正确:cin和std::cin含义相同 cout << i; //错误:没有对应的using声明,必须使用完整的名字 return 0; } 需要注意的是每个名字需要独立的using声明。例如:
using std::cin; //必须每一个都有独立的using声明 using std::cout; using std::endl; //写在同一行也需要独立声明 位于头文件的代码一般来说不应该使用using声明。因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明,有可能产生名字冲突。
3、在子类中引用基类成员 在子类中对基类成员进行声明,可恢复基类的防控级别。有三点规则:
在基类中的private成员,不能在派生类中任何地方用using声明。在基类中的protected成员,可以在派生类中任何地方用using声明。当在public下声明时,在类定义体外部,可以用派生类对象访问该成员,但不能用基类对象访问该成员;当在protected下声明时,该成员可以被继续派生下去;当在private下声明时,对派生类定义体外部来说,该成员是派生类的私有成员。在基类中的public成员,可以在派生类中任何地方用using声明。具体声明后的效果同基类中的protected成员。 例如:
class Base { protected: void test1() { cout << "test1" << endl; } void test1(int a) {cout << "test2" << endl; } int value = 55; }; class Derived : Base //使用默认继承 { public: //using Base::test1; //using只是声明,不参与形参的指定 //using Base::value; void test2() { cout << "
2019独角兽企业重金招聘Python工程师标准>>> 两段锁即两阶段锁(Two-phase locking - 2PL):
首先,两阶段锁强调的是“加锁(增长阶段,growing phase)和解锁(缩减阶段,shrinking phase)这两项操作,且每项操作各自为一个阶段,这就是说不管同一个事务内需要在多少个数据项上加锁,那么所有的加锁操作都只能在同一个阶段完成,在这个阶段内,不允许对对已经加锁的数据项进行解锁操作,即加锁和解锁操作不能交叉执行(同一个事务内)。这一条是说在同一个事务内部的事情。
其次,为了提高并发度,才对锁进行分类,分出共享锁(读锁)和排它锁(写锁),因这两种类型的锁,又产生加两种锁共四种事务之间受影响的情况:
一是先对数据项加共享锁,则此读锁不阻塞其他事务也读取本数据项,这就是说读读并发是允许的,即第一种情况;但是此读锁阻塞其他事务写本数据项,这就是说读写并发是不允许的,即第二种情况;这里所说的读读和读写的第一个读在前,是因;第二个读或写是可能在其他事务发生的操作,是果,前者(第二个读操作)能够发生后者(写操作)不能够发生。
二是对数据项施加了排它锁,这使得其他事务在这个数据项上的读操作(第三种情况)或写操作(第四种情况)都被禁止。
这一条是说在多个事务之间的事情。
多个事务之间比较锁是否兼容,用到了锁的兼容性列表,就是上面的四种情况。只是当锁的类型被扩展后,增加了意向锁等类型,才使得锁的兼容性列表变大,不再是四种情况,而是更多种。
第三,共享锁是允许向排它锁升级的,排它锁是允许向共享锁降级的,升级(upgrade)和降级(downgrade)操作,称为锁转换(lock conversion)。升级只能发生在增长阶段,降级只能发生在缩减阶段。升降级发生在同一个事务内部,但目的也是为了提高多个事务之间的并发度。同一个事物内部比较锁是否兼容,用到的是锁的升级列表,这与锁的兼容性列表是不同的。
所以,两阶段的含义是指在同一个事务内,对所涉及的所有数据项进行先加锁,然后才对所有的数据项解锁。但两阶段封锁第一阶段加共享锁后影响了其他事务的写操作、加排它锁后影响了其他事务的读操作(读受影响更不用提写),所以较大地影响了其他事务的运行(如果不操作相同数据项则互不影响)。只有第二阶段释放了所有的数据项上的锁之后,才能运行其他要操作相同数据项的事务。
转载于:https://my.oschina.net/weiweiblog/blog/2963216
获取不到input内自己输入的值 <form method="get" action="calc.php" id="myForm">
num1: <input id="num1" type=text name="num1" value="" /> <br/> num2: <input id="num2" type=text name="num2" value="" /> <br/> oper: <select name="oper" value=""> <option value="+">+</option> <option value="-">-</option> <option value="*">*</option> <option value="/">/</option> </select> <br/> <input type="submit" value="提交" /> <script> var subBtn = document.getElementById("myForm"); var num1Val = document.getElementById("num1").value; var num2Val = document.getElementById("num2").value; subBtn.onsubmit = function () { alert(num1Val); return false; }; </script> </form>
你页面加载好,num1Val的值就已经获得了,此时value值位空,你提交的时候肯定还是空。解决办法:
点击提交的时候在去获取值:
var subBtn = document.getElementById("myForm"); subBtn.
为什么8位有符号数的取值范围是-128 ~127
计算机存储数据是以什么码(原码,反码,补码)存储的?为什么?带着问题一起探讨。
我们知道,有符号数的取值范围为:-2^(n-1) ~ 2^(n-1)-1 (其中n为数据位数),当n=8时,数据取值范围:-128 ~ 127
对于无符号类型n=8时,数据取值范围为: 0 ~255
正数的原码,反码,补码都相同,
数值 原码 反码 补码 符号位
0 0000 0000 0000 0000 0000 0000 0
1 0000 0001 0000 0001 0000 0001 0
... ...... .... ...
127 0111 1111 01111 1111 0111 1111 0
负数的原码,反码和补码不同,转化原理为:原码-------位取反(符号位不变)------->反码-------------+1----------->补码
数值 原码 反码 补码 符号位
-1 1000 0001 1111 1110 1111 1111 1
-2 1000 0010 1111 1101 1111 1110 1
... .
0 入门详解篇 1 史上最简单入门:java8的lambda中的map相关操作:基础及注意事项图文详解
2 java8的lambda中collect接口案例及原理详解,官方文档解读
3 java8:封装lambda泛型工具类之list转为map
4 java8的lambda中的map操作:合并两个map
1 以下是正文 英文地址:https://www.baeldung.com/java-merge-maps
原文链接:https://blog.csdn.net/w605283073/article/details/82987157
1. 介绍
本入门教程将介绍Java8中如何合并两个map。如果想学习入门教程点击开篇0入门篇:lambda表达式:list转map
更具体说来,我们将研究不同的合并方案,包括Map含有重复元素的情况。
2. 初始化 我们定义两个map实例
private static Map<String, Employee> map1 = new HashMap<>(); private static Map<String, Employee> map2 = new HashMap<>(); Employee类
public class Employee { private Long id; private String name; // 此处省略构造方法, getters, setters方法 } 然后往map中存入一些数据
Employee employee1 = new Employee(1L, "Henry"); map1.put(employee1.getName(), employee1); Employee employee2 = new Employee(22L, "Annie"); map1.put(employee2.getName(), employee2); Employee employee3 = new Employee(8L, "
代码实现 pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MybatisGenerator</groupId> <artifactId>MybatisGenerator</artifactId> <version>1.0-SNAPSHOT</version> <build> <plugins> <!--mybatis 逆向生成插件--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-core</artifactId> <version>3.0</version> </dependency> </dependencies> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> </dependencies> </project> generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "
1:ajax传递表单数据的格式:必须含有data:json的数据格式(健值对)
{"username":$("input[name='username']").val(),"pwd":$("input[name='pwd']").val()}, ;
2:当获取的值是空的时候:不能调用toString()方法,会报500;
3:session是存在服务器当中的,cookie是存在浏览器客户端的
4:$("input[name='username']").val():获取标签中的值
5:注意是用servlet中返回回来的标志
6:ajax中的data是servelt中
response.getWriter().print("false");输出的值 7:注意文件上传需要导入两个包
commons-fileupload-1.3.2.jar
commons-io-2.5.jar
8:注意文件上传的时候表单会多一个属性
enctype="multipart/form-data" 9:注意cookie和session的区别
10:完成文件下载
1、单例模式
(1)、饿汉模式
public class Singleton{ //1.将构造方法私有化,不允许外部直接创建对象 private Singleton(){} //2.创建类的唯一实例,使用privatestatic变为类的静态成员 private static Singletoni nstance=new Singleton(); //3.提供一个可以获取实例的方法 public static Singleton getInstance(){ return instance; } } (2)、懒汉模式
public class Singleton2{ //1.将构造方法私有化,不允许外部直接创建对象 private Singleton2(){ } //2.创建类的唯一实例,使用privatestatic变为类的静态成员 private static Singleton2 instance; //3.提供一个可以获取实例的方法,使用publicstatic修饰 public static Singleton2 getInstance(){ if(instance==null)instance=new Singleton2(); return instance; } } 区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
HTML,CSS,JavaScript 分别是什么?
HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
> <!DOCTYPE HTML> <html> > <head> > <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> > <title>Html和CSS的关系</title> > <style type="text/css"> > h1{ > font-size:12px; //字体大小 > color:#930;//颜色 > text-align:center;//文字位置变化 > } > </style> > </head> > <body> > <h1>Hello World!</h1> > </body> </html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 1.http-equiv="Content-Type":http-equiv 属性为名称/值对提供了名称。并指示服务器在发送实际的文档之前先在要传送给浏览器的 MIME 文档头部包含名称/值对。当服务器向浏览器发送文档时,会先发送许多名称/值对。虽然有些服务器会发送许多这种名称/值对,但是所有服务器都至少要发送一个:content-type:text/html。这将告诉浏览器准备接受一个 HTML 文档。 2.使用带有 http-equiv 属性的 <meta> 标签时,服务器将把名称/值对添加到发送给浏览器的内容头部.content=text/html:text/html是一种标准的文件类型映射说明,可以叫MIME,是所有平台通行的。text/html之外还有text/css、text/javascript、application/vnd.ms-excel等等。 3.浏览器是通过Content-Type这个标记来了解文件类型的,而不是后缀名。说明这是个html文件 4.charset=UTF-8:编码方式,用的是utf-8编码 网页中每一个内容在浏览器中的显示,都要存放到各种标签中
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"
今天遇到一个问题,是关于Map的转化错误
Map<String, Integer> map = majorList.stream().collect(Collectors.toMap(Major::getName, Major::getId)); 之前是使用这种方式进行List转换为Mapper的,然后今天忽然报错
发现是因为相同key的时候,Map新建key-Value会失败
就改为
Map<String, Integer> map = majorList.stream().collect( Collectors.toMap(Major::getName, Major::getId, (s, a) -> s + a)); map.entrySet().stream().forEach(e -> System.out.println(e.getKey() + " = " + e.getValue())); 出现相同的key的时候,value会自动增加
log4j:ERROR Could not instantiate class [log4j].
java.lang.ClassNotFoundException: log4j
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:327)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:124)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:785)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
at org.apache.ibatis.logging.slf4j.Slf4jImpl.<init>(Slf4jImpl.java:33)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:127)
at org.apache.ibatis.logging.LogFactory.useSlf4jLogging(LogFactory.java:87)
at org.apache.ibatis.logging.LogFactory$1.run(LogFactory.java:36)
在http://www.riaway.com/中下载自己想要的主题,然后在IDEA中使用该jar即可
下载jar包后,我们点击File→Settings→Editor→ColorSchema→General点击设置中的importSchema即可
当我们导入jar后就可以使用不同的皮肤了
快速切换皮肤可以按 Ctrl+`
文章目录 render 函数作用render 函数讲解render 函数的返回值(VNode)render 函数的参数(createElement)createElement 函数的返回值(VNode)createElement 函数的参数(三个)结合代码 第二篇传送门:终于搞懂了vue 的 render 函数(二)(๑•̀ㅂ•́)و✧
vue渲染函数文档第一遍看的晕晕乎乎的,再看看写写终于清晰了。建议配合文档阅读,本文也是根据文档加上自己的理解。
注:本文代码都是在单文件组件中编写。代码地址
render 函数作用 render 函数 跟 template 一样都是创建 html 模板的,但是有些场景中用 template 实现起来代码冗长繁琐而且有大量重复,这时候就可以用 render 函数。
官网例子:子组件想要根据父组件传递的 level 值(1-6)来决定渲染标签 h 几。具体代码可以看文档。
render 函数讲解 render 函数即渲染函数,它是个函数,它的参数也是个函数——即 createElement,我们重点来说 createElement 参数。
render 函数的返回值(VNode) VNode(即:虚拟节点),也就是我们要渲染的节点。
render 函数的参数(createElement) createElement 是 render 函数 的参数,它本身也是个函数,并且有三个参数。
createElement 函数的返回值(VNode) createElement 函数的返回值是 VNode(即:虚拟节点)。
createElement 函数的参数(三个) 一个 HTML 标签字符串,组件选项对象,或者解析上述任何一种的一个 async 异步函数。类型:{String | Object | Function}。必需。一个包含模板相关属性的数据对象你可以在 template 中使用这些特性。类型:{Object}。可选。子虚拟节点 (VNodes),由 createElement() 构建而成,也可以使用字符串来生成“文本虚拟节点”。类型:{String | Array}。可选。 结合代码 /** * render: 渲染函数 * 参数: createElement * 参数类型: Function */ render: function (createElement) { let _this = this['$options'].
快捷打开管理员权限cmd的方法
方法1:右键开始菜单(热键win+x)
方法2:开始菜单搜索,输入cmd,搜索出来的结果,右键选择 管理员打开
网上流传一种方法,非管理员权限的cmd中,输入runas命令,通过administrator的权限去打开。
首先打开一个普通权限cmd窗口:
打开以后,输入命令
runas /user:administrator "cmd.exe cmd/k" 回车,提示输入密码,输入密码的界面光标是不会变的,也不会显示输入的字符,这是正常的,只要把密码都敲对了就行。完事回车就ok了……OK了吗?
其实并没有。。。。由于win10处于安全考虑,会默认把administrator的账户禁用并隐藏。因此如果是重新装的win10,根本就没有administrator用户,所以执行命令的结果就是报错。
所以继续查解决方法。需要现在cmd中输入命令,将administrator账户恢复……
相关命令如下:
net user administrator /active:yes (放出administrator账户)
net user administrator /active:no (禁用administrator账户)
将administrator放出的另一种方法:
打开计算机管理窗口(运行:compmgmt.msc comp是computer,mgmt是management)
点击属性,将“账户已禁用”勾掉, 确定。
Symantec Endpoint Protection 14 (不支持WinXP) 新版
中客端 http://esdownload.symantec.com/a … _All_Clients_CS.zip
英客端 http://esdownload.symantec.com/a … _All_Clients_EN.zip
服务端 http://esdownload.symantec.com/a … tion_14_SEPM_CS.exe
完全版 http://esdownload.symantec.com/a … Installation_CH.exe
百度网盘链接: http://pan.baidu.com/s/1c2n59WO
Symantec Endpoint Protection 12.1.x (支持WinXP)
中客端 http://esdownload.symantec.com/a … _All_Clients_CS.zip
英客端 http://esdownload.symantec.com/a … _All_Clients_EN.zip
服务端 http://esdownload.symantec.com/a … 1.6_MP6_SEPM_CS.exe
完全版 http://esdownload.symantec.com/a … Installation_CH.exe
中客端 http://esdownload.symantec.com/a … _All_Clients_CS.zip
英客端 http://esdownload.symantec.com/a … _All_Clients_EN.zip
中客端 http://esdownload.symantec.com/a … 4-bit_Client_CS.exe
中客端 http://esdownload.symantec.com/a … 4-bit_Client_CS.exe
百度网盘链接: http://pan.baidu.com/s/1c2n59WO
不推荐大家用“迅雷”下载,如果下载了请自行校验 Hash值。
新的下载方法:
下载 wget 并解压到硬盘 wget工具官方网站运行 CMD 加载 wget.
Spring中有@DataTimeFormat和@JsonFormat进行data类型转化
@JsonFormat不要忘了加GMT+8
@DateTimeFormat要注意前台传过的日期格式是yyyy-MM-dd的形式,如果你传了一个yyyyMMdd的形式会报错(日期格式基于下面的程序):
@DateTimeFormat(pattern = "yyyy-MM-dd") //入参 @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") //出参 需要引入 <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.3</version> </dependency> jsonformat是将date转换为String,而DatetimeFormat是将string转换为date