开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

Go圣经-学习笔记之复合类型(三)

json的简单使用
cdh0805010 发布于 2小时前 阅读 20

令人抓狂的代码 - 万能正则表达式.*陷阱

令人抓狂的代码 - 万能正则表达式.*陷阱
joymufeng 发布于 2小时前 阅读 41 点赞 1

Go圣经-学习笔记之复合类型

复合数据类型
cdh0805010 发布于 22小时前 阅读 127

你真的了解For循环吗?一道For循环Java面试题引发的思考

疑问 最近群友抛出了一个面试题,就是下图中的第二题,是关于一个for循环的执行结果的问题,他的代码的执行结果是什么呢?  代码复现 下面的例子和面试题上面的大同小异,是个非常简单的例子。首先这个代码是可以编译通过的,也可以正常执行的。那么执行结果是什么呢?会跟我们猜想的一样吗? /** * Created by baiguantao on 2017/10/20. */ public class T { public static boolean testA(char a){ System.out.print(a); return true; } /** * for循环的一些疑问 * @param args */ public static void main(String[] args) { int i=0; for (testA('a');testA('b')&&(i<2);testA('c')) { i++; testA('d'); } } } 执行结果 abdcbdcb 那么问题来了,为什么是这个结果呢?我们可以借助javap命令反编译我们刚才编译的T.class进行分析。 如果对jvm不了解的可以参阅JVM基础。 反编译 先贴出原版的字节码反编译后的代码,后边会对反编译的文件进行逐行解析,那么我们先来看看上述类反编译后的样子吧。如下所示: C:\Users\temp\IdeaProjects\mix_learn\target\clas...
路上有你0314 发布于 1天前 阅读 1010 评论 25 点赞 3

jvm - 运行时内存结构

# jvm - 运行时内存结构 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章末尾处会有标注 ## **内存模型示意图** ![Jvm运行时内存结构](https://static.oschina.net/uploads/img/201710/20094601_LPX9.png "Jvm运行时内存结构") ## **每个区域的作用简述** ### **pc寄存器 (program counter)** 每一条java虚拟机线程都有自己的pc寄存器 在任意时刻,一条java虚拟机线程只会执行一个方法的代码,正在被线程执行的方法称为该线程的当前方法 (如果这个方法不是native的,那pc寄存器就保存java虚拟机正在执行的字节码指令的地址) (如果这个方法是natice的,那pc寄存器的值是undefined) pc寄存器的容量至少应当能保存一个returnAddress类型的数据或者一个与平台相关的本地指针的值 ### **虚拟机栈 (virtual machine stack)** 每条java虚拟机线程都有自己私有的java虚拟机栈,这个栈与线程同时创建,用于存储栈帧 (用于存储局部变量与一些尚未算好的结果) 除了栈帧的入栈和出栈之外,不会再受其他因素影响,所以栈帧可以在堆中分配,java虚拟机栈所使用的内存不需要保证是连续的 java虚拟机规范允许java虚拟机栈被实现成固定大小的,也允许根据计算来动态扩展和收缩...
wangkang80 发布于 1天前 阅读 519 评论 3 点赞 1

Go圣经-临时插入ORM的小trick

orm事务
cdh0805010 发布于 2天前 阅读 124

Go圣经-学习笔记之程序结构

变量声明和生命周期、简单的逃逸分析、指针的作用和flag标准库的简单使用
cdh0805010 发布于 2天前 阅读 196 点赞 1

Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解

一、表(这里用mysql,数据库名为yiibai)  CREATE TABLE `user` ( `id` int(10) UNSIGNED NOT NULL, `name` varchar(64) NOT NULL DEFAULT '', `dept` varchar(254) NOT NULL DEFAULT '', `website` varchar(254) DEFAULT '', `phone` varchar(16) NOT NULL DEFAULT '', `birthday` date DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Indexes for table `user` -- ALTER TABLE `user` ADD PRIMARY KEY (`id`); 二、表相应的实体类User.java以及mybatis表map配置文件User.xml package com.yiibai.mybatis.models; import java.util.Date; public class User { public User(int id, String name, String dept, String phone, String website, Date birthday) { super(); this.id = id; this.name = name; this.dept = dept; this.phone = phone; this.website = website; this.birthday = birthday; } public User() { super(); // TODO 自动生成的构造函数存根 } private int id; private String name; private String dept; private String phone; private String website; private D...
wangxuwei 发布于 3天前 阅读 160 评论 2

JDK容器学习之List: CopyOnWriteArrayList,ArrayList,LinkedList对比

list常用容器小结对比
小灰灰Blog 发布于 3天前 阅读 116 点赞 1

Go圣经-学习笔记入门bufio.Writer

理解bufio.Writer
cdh0805010 发布于 3天前 阅读 70

python3.x + BeautifulSoup CSDN小爬虫

## 前言 很长一段时间里都想研究下爬虫,说到爬虫,大家比较推存的还是python,奈何第一语言不是python,使用Java做个一些练手后,感觉在解析网页内容上比较繁琐,带着拥抱变化的心态,最终撸完了python的相关基础知识。蹭着知识的新鲜和热乎劲,速度找了CSDN博客来发挥发挥,记录下来,鞭策和监督自己,与努力的小伙伴们共勉。 ## 一.目标 根据指定用户名获取CSDN的博客文章详情,包括文章id,标题,正文,标签,阅读人数,是否原创,并且把数据保存到数据库中。 ## 二.分析 欲善其事,先利其器,抓起数据第一步就是对待抓起数据的网页进行结构分析,步骤为:网页入口->跳转链接->待抓起页 。 ## 三.获取目标链接 ### 1.文章列表页 ![输入图片说明](https://static.oschina.net/uploads/img/201710/21101110_R9W7.png "在这里输入图片标题") ### 2.获取列表页链接 ![输入图片说明](https://static.oschina.net/uploads/img/201710/21103606_IP1x.png "在这里输入图片标题") 分析文章列表页代码,发现当前页所有文章都在一个class='article_list'的div下,故先获取此div,再获取里面所有的文章链接。 ``` def getOnePageLinks(user, no=1): pageLinks=[] url = __rootUrl ...
typistw 发布于 3天前 阅读 20

Go圣经-学习笔记入门bufio

ReadSlice容易犯错的方法
cdh0805010 发布于 4天前 阅读 222

Go圣经-学习笔记入门-面试题

Go,面试基础知识
cdh0805010 发布于 4天前 阅读 120

JDK容器学习之CopyOnWriteArrayList:线程安全保障机制

CopyOnWriteArrayList底层数据存储结构,读写接口的分析,并探究保障线程安全的机制
小灰灰Blog 发布于 4天前 阅读 211 评论 1

JDK9 学习之二 - Jshell(java 函数变成交互式 shell)

**谁说原生java不能函数式编成!** JShell(JAVA Shell tool)是用来学习java语言和代码设计的一个交互式工具。JShell是一个Read-Evaluate-Print Loop (REPL)阅读-键入-打印-循环系统(函数式编成),他可以进行代码声明、输入语句、输入表达式 然后直接显示结果。 然后这是一个命令行工具。
_Leo_ 发布于 6天前 阅读 430 评论 3

python函数装饰器用法分解示例

从最简单的函数一步一步构造强大装饰器
张豪飞 发布于 1周前 阅读 205 评论 1

实用的设计模式--模板方法模式

模板方法模式以及应用
xpbob 发布于 1周前 阅读 223

java并发编程的艺术-第四章之Java并发基础

为什么要使用多线程 Java天生就是多线程程序,简单的一个main() 方法的执行,其实是由main线程和其它的线程共同执行的。当然使用多线程有如下的好处:         1、利用更多的处理器核心         2、更快的响应速度,如将数据一致性不强的操作交给其它的线程去操作         3、更好的编程模型 线程简介 一、线程优先级 在线程执行过程中,线程优先级决定了需要分配处理器资源的多少,从而决定了获取时间片的多少。现在线程构建时,可以通过setPriority()方法来修改优先级,默认优先级是5.但是在不同的JVM以及操作系统上面,线程的规划有些不同,甚至有些操作系统会忽略对线程优先级的设定,都是采用默认值。   二、线程状态 线程状态 状态名称 说明 NEW 初始状态,线程被创建,还没有有调用start()方法 RUNNABLE 运行状态,java中就绪也属于运行状态 BLOCKED 阻塞状态,表示线程阻塞在进入synchronize修饰的方法或代码块(获取锁)时的状态 WAITING 等待状态,进入该状态表示当前线程需要等待其他的线程做出特定动作(通知、中断)才返回 TIME_WAITING 超时等待,不同于WAITING,它是等到指定时间到达自动返回 TERMINTED 终止状态,表示当前线程执行完成   Daem...
wusd1256 发布于 1周前 阅读 580 点赞 2

一张思维导图,让正则表达式不再难懂

一张精彩的导图  关注公众号回复“正则导图”即可下载xmind源文件   导图内容解析 语法结构 字符 普通字符:字母、数字、汉字、下划线,匹配与之相同的一个字符 简单转义字符:\n(换行),\t(制表),\\(\本身)和 \^...(\^等有特殊作用的符号如要匹配自己的话要用转义) 标准字符集合 注意区分大小写,大写是相反的意思,匹配相反是不匹配 \d 任意一个数字,0~9 \w 任意一个字母、数字、汉字或下划线,A~Z、a~z、0~9、_和任意一个汉字 \s 任意空白符,包括空格、制表符、换行符 . 小数点可以匹配任意一个字符,换行除外(如果要匹配包括"\n"在内的所有字符,一般用[\s\S]) 自定义字符集合 [ ]方括号匹配方式,能够匹配方括号中的任意一个字符,^表示取反 [ab5@] 匹配"a"或"b"或"5"或"@" [^abc] 匹配a、b、c之外的任意字符 [f-k] 匹配“f"到"k"之间的字符 [^A-F0-3] 匹配“A"-"F","0"-"3"之外的任意一个字符 量词(Quantifier) 修饰前面的一个表达式,如果要修饰多个表达式,就用( )把表达式包起来 {n} 表达式重复n次​ {m,n} 表达式至少重复m次,最多重复n次 贪婪模式 (默认) 匹配符合的最长的字符串 非贪婪模式 (在量词后面加 ? 例:{m,n}? ) 匹配符合的最短的字符...
java思维导图 发布于 1周前 阅读 10280 评论 23 点赞 44

JDK容器学习之Map: HashMap,TreeMap,LinkedHashMap对比小结

HashMap, TreeMap, LinkedHashMap 的结构对比,使用场景区分
小灰灰Blog 发布于 2周前 阅读 575 评论 1 点赞 2

令人抓狂的代码 - 万能正则表达式.*陷阱

令人抓狂的代码 - 万能正则表达式.*陷阱
joymufeng 发布于 2小时前 阅读 41 点赞 1

Go圣经-学习笔记之复合类型(三)

json的简单使用
cdh0805010 发布于 2小时前 阅读 20

使用Spring自定义注解实现任务路由

在Spring mvc的开发中,我们可以通过RequestMapping来配,当前方法用于处理哪一个URL的请求.同样我们现在有一个需求,有一个任务调度器,可以按照不同的任务类型路由到不同的任务执行器。其本质就是通过外部参数进行一次路由和Spring mvc做的事情类似。简单看了Spring mvc的实现原理之后,决定使用自定义注解的方式来实现以上功能。 ### 自定义TaskHandler注解 ```java @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface TaskHandler { String taskType() default ""; } ``` 以上定义了任务处理器的注解,其中@Component表示在spring 启动过程中,会扫描到并且注入到容器中。taskType表示类型。 ### 任务处理器定义 ```java public abstract class AbstractTaskHandler { /** * 任务执行器 * * @param task 任务 * @return 执行结果 */ public abstract BaseResult execute(Task task); } ``` 以上定义了一个任务执行的处理器,其他所有的具体的任务执行器继承实现这个方法。其中Task表示任务的定义,包括任务Id,执行任务需要的参数等。 ### 任务处理器实现 接下来,我们可以实现一个具体的任务处理器。 ```jav...
wangyan9110 发布于 3个月前 阅读 3518 评论 8 点赞 8

python函数装饰器用法分解示例

从最简单的函数一步一步构造强大装饰器
张豪飞 发布于 1周前 阅读 205 评论 1

HashMap源码深度解析

ref:http://www.cnblogs.com/wuhuangdi/p/4175991.html
文川simple 发布于 1周前 阅读 8

Python的数据类型二

1、  列表 列表是由序列特定顺序排列的元素组成。可以把字符串,数字,字典等任何东西加入到列表,列表是自带下标的,默认从0开始。   str1 = “abcdefghejklmn” print(list(str1))   a = [‘a’, ‘b’, ‘c’, ‘abc’,123] print(a) print(type(a))   print(dir(a)) #查看列表的方法 append(追加) index(符合条件的下标) insert(插入list中的一个元素) pop(末尾删除一个list元素) remove(删除list中的一个元素) reverse(list反序) sort(对list进行排序)         a.append(‘hello’) #在a的列表最后追加字符串‘hello’       print(a.index(‘abc’)) #查看abc在a列表的下标,跟find意义相近   a.insert(0, ‘null’) #在0下标上插入null字符 print(a)     a.remove(‘abc’) #删除list中的abc字符串   a.sort() #对list进行排序 print(a)     a.reverse() #对list进行反向排序 print(a)   切片 切片的时候,取的是最后一位,数字-1   print(a[3:]) #取list下标3到最后的元素 print(a[1:5]) #取list下标1到4的元素 print(a[1:5:2]) #取list下标1到4的元素,步进值为2,间隔为2         2、  元组 Tuple可以理解为不可变的lis...
peizh 发布于 12小时前 阅读 5

PHP 自动加载机制

<?php function classLoader($class) { $path = str_replace('\\', DIRECTORY_SEPARATOR, $class); $file = __DIR__ . '/src/' . $path . '.php'; if (file_exists($file)) { require_once $file; } } spl_autoload_register('classLoader'); require_once __DIR__ . '/src/common/functions.php';  
Mading_EVE 发布于 5小时前 阅读 5

【17】嵌套监控锁的锁死问题

Jakob Jenkov 并发指南翻译:Nested Monitor Lockout
秋雨霏霏 发布于 2周前 阅读 7

maven添加sqljdbc4.jar,并引用

在sqljdbc4.jar的路径下,打开命令行输入: mvn install:install-file -Dfile=sqljdbc4.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 对jar包进行安装,输入结果如下: [INFO] Scanning for projects... Downloading: http://maven.aliyun.com/nexus/content/repositories/central/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Downloaded: http://maven.aliyun.com/nexus/content/repositories/central/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (3.9 kB at 16 kB/s) [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom --- [INFO] Installing C:\Users\pengu\Desktop\连发工具\sqljdbc4.jar to D:\Applications\apache-maven\.m2\repository\com\microsoft\sqlserver\sqljdbc4\4...
杰克鹏仔 发布于 13小时前 阅读 4

最最简单的spring例子

 bean类 package hello; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HelloWorld { private String Msg; public void Hello() { System.out.println("Hello:" + Msg); } @Bean(name = "helloworldbean") public HelloWorld helloWorldBean() { HelloWorld hw = new HelloWorld(); hw.Msg = "How are you ?"; return hw; } } 测试类: package hello; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestHelloWorld { /** * @param args */ private static ApplicationContext ctx; public static void main(String[] args) { // TODO 自动生成的方法存根 ctx = new AnnotationConfigApplicationContext(HelloWorld.class); HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloworldbean"); helloWorld.Hello(); } } 运行结果: 2017-10-24 00:34:15 [org.springframework.context.annotation.Annotati...
wangxuwei 发布于 13小时前 阅读 4

SVN提交到老分支补救指南;)

1. 生成补丁: ```shell svn diff old_branch_url new_branch-url >/tmp/patch ``` 2. 对已经切换到新分支的工作目录应用补丁: ```shell patch -p0 < /tmp/patch ```
yx91490 发布于 4小时前 阅读 4

maven多环境配置

  <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.bailiangroup.buyer</groupId> <artifactId>blgroup-buyer-support-parent</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>blgroup-buyer-web</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.bailiangroup.osp</groupId> <artifactId>blms-common-domain</artifactId> </dependency> <dependency> <groupId>com.bailiangroup.osp</groupId> <artifactId>blms-common-service</artifactId> </dependency> <dependency> <groupId>com.bailiangroup.osp</groupId> <artifactId>blms-common-web</artifactId> <scope>runtime</scope> <version>${blms.common.service.version}</version> <type>war</type> </dependency> <!-- CKFind...
Eureka_尤里卡 发布于 2个月前 阅读 21

shell脚本笔记

1.变量命名要求: 首个字符必须为字母(a-z,A-Z)。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字) 2.特殊赋值格式: for file in `ls /etc`  ----->以上语句将 /etc 下目录的文件名循环出来 3.变量定义: your_name="tom" 4.变量使用: $your_name   ${your_name} 花括号可选,为了明确边界 5.只读变量: readonly your_name 6.删除变量: unset your_name  ---------->变量被删除后不能再次使用。unset 命令不能删除只读变量 7.变量类型: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行 8.Shell字符串: 8.1单引号: str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号...
时光流转 发布于 2个月前 阅读 8

python列表,元组,字典

列表: a = ['a', 'b', 'c', 'abc', 1, 2, 3] print a   # append默认添加在最后 a.append(4) print a 输出:['a', 'b', 'c', 'abc', 1, 2, 3, 4]   # index方法能够查看列表中4这个元素的下标索引是多少 print (a.index(4)) 输出:7   # 使用insert方法能够向列表中插入元素 a.insert(2,'hh') print a 输出:['a', 'b', 'hh', 'c', 'abc', 1, 2, 3, 4]   # 默认删除最后一位,可以添加下标删除 a.pop(7) print a 输出:['a', 'b', 'hh', 'c', 'abc', 1, 2, 4]   # 使用remove方法能够删除掉列表中a这个元素 a.remove('a') print a 输出:['b', 'hh', 'c', 'abc', 1, 2, 4]   # 使用sort方法可以针对列表进行排序,但是列表中需要全是数字或字符串,不能既有数字也有字符串 b = [1, 2, 8, 9, 5, 6, 7] b.sort() print (b) 输出:[1, 2, 5, 6, 7, 8, 9]   # 使用reverse可以针对列表进行反序排序 b.reverse() print(b) 输出:[9, 8, 7, 6, 5, 2, 1]   字符串,可以进行索引和切片操作,字符串是不可变的,可迭代的 a=‘abcd’ a[0] 为a a[2] 为c a[0:2] 为ab    (从0开始取2个,省略0为从第一个开始,省略最后为直接取到最后一个) a[0:4:2] 为ad    (从0开始取,...
粗粮面包 发布于 13小时前 阅读 3

JVM常量池中的数据结构

JVM规范中,对于常量池的数据结构描述
秋雨霏霏 发布于 4周前 阅读 18

stackless python初体验

stackless python初体验
mickelfeng 发布于 3个月前 阅读 21

新手Java程序猿,怎样在代码中避免空指针异常

今天,因为昨晚赶项目,并且自己也是个java新手,在获取前台传递的参数后,条件比较时,发生了啊【NullPointerException】,唉,居然被赵总看到了...
AIU_weijue 发布于 5天前 阅读 17

python 验证码生成

# 验证码生成库 from captcha.image import ImageCaptcha # pip3 install captcha import random number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] def random_captcha_text(char_set=number, captcha_size=4): # 验证码列表 captcha_text = [] for i in range(captcha_size): # 随机选择 c = random.choice(char_set) # 加入验证码列表 captcha_text.append(c) return captcha_text # 生成字符对应的验证码 def gen_captcha_text_and_image(i): image = ImageCaptcha(width=64 * 2, height=64) # 获得随机生成的验证码 captcha_text = random_captcha_text() # 把验证码列表转为字符串 captcha_text = ''.join(captcha_text) # 生成验证码 ...
阿豪boy 发布于 1个月前 阅读 6

Jenkins使用配置

Jenkins是什么?   先了解一下持续集成的概念:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。而Jenkins就是基于Java开发的一种持续集成工具,用于监控持续重复的工作。   Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。   功能: 1、持续的软件版本发布/测试项目。       2、监控外部调用执行的工作。   特性:   1.开源   2.安装、配置简单--只要把jenkins.war部署到servlet容器,不需要数据库支持,所有配置都是通过其提供的web界面实现。   3.集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。   4.生成JUnit/TestNG测试报告。   5. Jenkins支持分布式构建   6.插件支持:支持扩展插件,目前有几百个现成的插件可以使用,这些插件涵盖从版本控制、构建工具、代码质量、构建通知、集成外部系统、 UI定制、游戏等等各个方面。 Jenkins下载安装   官网下载地址:https://jenkins.io/index.html 1.下载...
小杰java 发布于 16小时前 阅读 2

spring boot 使用携程Apollo配置Druid

## 使用包 ``` com.ctrip.framework.apollo apollo-client com.alibaba druid ``` ## 获取本地数据源配置代码 ``` import org.springframework.boot.context.properties.ConfigurationProperties; /** * 获取数据源配置 * Created by yanhao on 2017/8/9. */ @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { private String url; private String username; private String password; private String driverClassName; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } } ``` ## apollo配置代码 ``` import com.alibaba.druid.pool.DruidDataSourc...
yan5845hao 发布于 2个月前 阅读 23

Python 字符串格式化 format

## 写在开头 ```python 比%更优雅的字符串格式化方式. def format(self, *args, **kwargs): # S.format(*args, **kwargs) -> string # Return a formatted version of S, using substitutions from args and kwargs. # The substitutions are identified by braces ('{' and '}'). ``` ## 格式化方式 ##### 通过索引格式化 ```python 注意: "通过索引从format参数中的args中取值, 索引从0开始依次填充{0}, {1} ..." >>> print "{0} 的体重为 {1}KG".format("tianshl", 57) tianshl 的体重为 57KG >>> print "{1} 的体重为 {0}KG".format(57, "tianshl") tianshl 的体重为 57KG ``` ```python 注意: "format中参数个数不能少于实际要填充的{}的个数, 多余的参数会忽略" >>> print "{0} 的体重为 {1}KG".format("tianshl",) Traceback (most recent call last): File "", line 1, in IndexError: tuple index out of range >>> print "{0} 的体重为 {1}KG, Ta的名字为 {0}".format("tianshl", 57) tianshl 的体重为 57KG, Ta的名字为 tianshl >>> print "{0} 的体重为 {1}KG".format("tianshl", 57, "多余的参数") tianshl 的体重为 57KG ``` ```python 注意: "若{}不写索引则...
tianshl 发布于 3个月前 阅读 109259

Python 计算器

### 运行截图 ![这里写图片描述](http://img.blog.csdn.net/20171017222741550?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ### 源码 ```python # -*- coding: utf-8 -*- from tkinter import * __author__ = 'tianshl' __date__ = '2017/10/16' class Application(Frame): def __init__(self): Frame.__init__(self) self.grid() self.mem = '' # 内存中的数据 self.opt = '' # 操作符 self.display = StringVar() # 显示的数据 self.display.set('0') # 初始值 self.need_cls = False # 是否需要清屏 self.create_widgets() # 清空 def clear(self): self.mem = '' self.display.set('0') # 取反 def negative(self): self.display.set(eval('-' + self.display.get())) # 四则运算 def option(self, opt): if not self.need_cls: self.calculate() self.opt = opt self.need_cls = True self.mem = self.display.get() # 计算结果 def calculate(self): if self.opt: try: self.display.set(eval(self.mem + self.opt + self.display.get())) except Exception: ...
tianshl 发布于 6天前 阅读 53344

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

一张思维导图,让正则表达式不再难懂

一张精彩的导图  关注公众号回复“正则导图”即可下载xmind源文件   导图内容解析 语法结构 字符 普通字符:字母、数字、汉字、下划线,匹配与之相同的一个字符 简单转义字符:\n(换行),\t(制表),\\(\本身)和 \^...(\^等有特殊作用的符号如要匹配自己的话要用转义) 标准字符集合 注意区分大小写,大写是相反的意思,匹配相反是不匹配 \d 任意一个数字,0~9 \w 任意一个字母、数字、汉字或下划线,A~Z、a~z、0~9、_和任意一个汉字 \s 任意空白符,包括空格、制表符、换行符 . 小数点可以匹配任意一个字符,换行除外(如果要匹配包括"\n"在内的所有字符,一般用[\s\S]) 自定义字符集合 [ ]方括号匹配方式,能够匹配方括号中的任意一个字符,^表示取反 [ab5@] 匹配"a"或"b"或"5"或"@" [^abc] 匹配a、b、c之外的任意字符 [f-k] 匹配“f"到"k"之间的字符 [^A-F0-3] 匹配“A"-"F","0"-"3"之外的任意一个字符 量词(Quantifier) 修饰前面的一个表达式,如果要修饰多个表达式,就用( )把表达式包起来 {n} 表达式重复n次​ {m,n} 表达式至少重复m次,最多重复n次 贪婪模式 (默认) 匹配符合的最长的字符串 非贪婪模式 (在量词后面加 ? 例:{m,n}? ) 匹配符合的最短的字符...
java思维导图 发布于 1周前 阅读 10280 评论 23 点赞 44

你真的了解For循环吗?一道For循环Java面试题引发的思考

疑问 最近群友抛出了一个面试题,就是下图中的第二题,是关于一个for循环的执行结果的问题,他的代码的执行结果是什么呢?  代码复现 下面的例子和面试题上面的大同小异,是个非常简单的例子。首先这个代码是可以编译通过的,也可以正常执行的。那么执行结果是什么呢?会跟我们猜想的一样吗? /** * Created by baiguantao on 2017/10/20. */ public class T { public static boolean testA(char a){ System.out.print(a); return true; } /** * for循环的一些疑问 * @param args */ public static void main(String[] args) { int i=0; for (testA('a');testA('b')&&(i<2);testA('c')) { i++; testA('d'); } } } 执行结果 abdcbdcb 那么问题来了,为什么是这个结果呢?我们可以借助javap命令反编译我们刚才编译的T.class进行分析。 如果对jvm不了解的可以参阅JVM基础。 反编译 先贴出原版的字节码反编译后的代码,后边会对反编译的文件进行逐行解析,那么我们先来看看上述类反编译后的样子吧。如下所示: C:\Users\temp\IdeaProjects\mix_learn\target\clas...
路上有你0314 发布于 1天前 阅读 1010 评论 25 点赞 3

jvm - 运行时内存结构

# jvm - 运行时内存结构 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章末尾处会有标注 ## **内存模型示意图** ![Jvm运行时内存结构](https://static.oschina.net/uploads/img/201710/20094601_LPX9.png "Jvm运行时内存结构") ## **每个区域的作用简述** ### **pc寄存器 (program counter)** 每一条java虚拟机线程都有自己的pc寄存器 在任意时刻,一条java虚拟机线程只会执行一个方法的代码,正在被线程执行的方法称为该线程的当前方法 (如果这个方法不是native的,那pc寄存器就保存java虚拟机正在执行的字节码指令的地址) (如果这个方法是natice的,那pc寄存器的值是undefined) pc寄存器的容量至少应当能保存一个returnAddress类型的数据或者一个与平台相关的本地指针的值 ### **虚拟机栈 (virtual machine stack)** 每条java虚拟机线程都有自己私有的java虚拟机栈,这个栈与线程同时创建,用于存储栈帧 (用于存储局部变量与一些尚未算好的结果) 除了栈帧的入栈和出栈之外,不会再受其他因素影响,所以栈帧可以在堆中分配,java虚拟机栈所使用的内存不需要保证是连续的 java虚拟机规范允许java虚拟机栈被实现成固定大小的,也允许根据计算来动态扩展和收缩...
wangkang80 发布于 1天前 阅读 519 评论 3 点赞 1

python函数装饰器用法分解示例

从最简单的函数一步一步构造强大装饰器
张豪飞 发布于 1周前 阅读 205 评论 1

Go圣经-学习笔记入门-面试题

Go,面试基础知识
cdh0805010 发布于 4天前 阅读 120

Python NLP入门教程

本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。 ## 什么是NLP? 简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。 这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。 这并不是NLP能做的所有事情。 ## NLP实现 **搜索引擎**: 比如谷歌,Yahoo等。谷歌搜索引擎知道你是一个技术人员,所以它显示与技术相关的结果; **社交网站推送**:比如Facebook News Feed。如果News Feed算法知道你的兴趣是自然语言处理,就会显示相关的广告和帖子。 **语音引擎**:比如Apple的Siri。 **垃圾邮件过滤**:如谷歌垃圾邮件过滤器。和普通垃圾邮件过滤不同,它通过了解邮件内容里面的的深层意义,来判断是不是垃圾邮件。 ## NLP库 下面是一些开源的自然语言处理库(NLP): * Natural language toolkit (NLTK); * Apache OpenNLP; * Stanford NLP suite; * Gate NLP library 其中自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,而且背后有非常强大的社区支持...
j_hao104 发布于 4周前 阅读 3128 评论 16 点赞 9

JDK容器学习之CopyOnWriteArrayList:线程安全保障机制

CopyOnWriteArrayList底层数据存储结构,读写接口的分析,并探究保障线程安全的机制
小灰灰Blog 发布于 4天前 阅读 211 评论 1

Java9之HttpClientAPI实战详解

Java9之HttpClientAPI实战详解 前言 相信关注java9的小伙伴们都知道java9版本内置模块提供了Http功能,当然并不是说之前jdk之前并不支持,那么这次更新又多了什么呢?或者是解决了什么问题? 说明 自JDK 1.0以来,Java已经支持HTTP/1.1。 HTTP API由java.net包中的几种类型组成。 现有的API有以下问题: 它被设计为支持多个协议,如http,ftp,gopher等,其中许多协议不再被使用。 太抽象了,很难使用。 它包含许多未公开的行为。 它只支持一种模式,阻塞模式,这要求每个请求/响应有一个单独的线程。 2015年5月,IETF(Internet Engineering Task Force)发布了HTTP/2规范。 有关HTTP/2规范的完整文本,请访问https://tools.ietf.org/html/rfc7540。 HTTP/2不会修改应用程序级语义。 也就是说,对应用程序中的HTTP协议的了解和使用情况并没有改变。 它具有更有效的方式准备数据包,然后发送到客户端和服务器之间的电线。 所有之前知道的HTTP,如HTTP头,方法,状态码,URL等都保持不变。 HTTP/2尝试解决与HTTP/1连接所面临的许多性能相关的问题: HTTP/2支持二进制数据交换,来代替HTTP/1.1支持的文本数据。 HTTP/2支持多路复用和并发,这意味着多个数据交换可以同时发生...
路上有你0314 发布于 3周前 阅读 2940 评论 6 点赞 6

Go圣经-学习笔记之复合类型

复合数据类型
cdh0805010 发布于 22小时前 阅读 127

java并发编程的艺术-第四章之Java并发基础

为什么要使用多线程 Java天生就是多线程程序,简单的一个main() 方法的执行,其实是由main线程和其它的线程共同执行的。当然使用多线程有如下的好处:         1、利用更多的处理器核心         2、更快的响应速度,如将数据一致性不强的操作交给其它的线程去操作         3、更好的编程模型 线程简介 一、线程优先级 在线程执行过程中,线程优先级决定了需要分配处理器资源的多少,从而决定了获取时间片的多少。现在线程构建时,可以通过setPriority()方法来修改优先级,默认优先级是5.但是在不同的JVM以及操作系统上面,线程的规划有些不同,甚至有些操作系统会忽略对线程优先级的设定,都是采用默认值。   二、线程状态 线程状态 状态名称 说明 NEW 初始状态,线程被创建,还没有有调用start()方法 RUNNABLE 运行状态,java中就绪也属于运行状态 BLOCKED 阻塞状态,表示线程阻塞在进入synchronize修饰的方法或代码块(获取锁)时的状态 WAITING 等待状态,进入该状态表示当前线程需要等待其他的线程做出特定动作(通知、中断)才返回 TIME_WAITING 超时等待,不同于WAITING,它是等到指定时间到达自动返回 TERMINTED 终止状态,表示当前线程执行完成   Daem...
wusd1256 发布于 1周前 阅读 580 点赞 2

Go圣经-学习笔记之程序结构

变量声明和生命周期、简单的逃逸分析、指针的作用和flag标准库的简单使用
cdh0805010 发布于 2天前 阅读 196 点赞 1

intellij idea 插件开发--快速定位到mybatis mapper文件中的sql

在使用mybatis开发的时候,常常需要查看对应方法的sql,经常是双击shift,然后搜索mapper文件,再找到对应的sql语句。开发久了,感觉很累,自己写个小插件得了。通过快捷键,可以快速定位到sql
流浪汉8023 发布于 2周前 阅读 1481 评论 7 点赞 4

JVM基础命令

介绍java虚拟机的指令功能,至少能阅读java代码生成的字节码指令含义 一、概述 Java虚拟机采用基于栈的架构,其指令由操作码和操作数组成。 操作码:一个字节长度(0~255),意味着指令集的操作码个数不能操作256条。 操作数:一条指令可以有零或者多个操作数,且操作数可以是1个或者多个字节。编译后的代码没有采用操作数长度对齐方式,比如16位无符号整数需使用两个字节储存(假设为byte1和byte2),那么真实值是 (byte1 << 8) | byte2。 放弃操作数对齐操作数对齐方案: 优势:可以省略很多填充和间隔符号,从而减少数据量,具有更高的传输效率;Java起初就是为了面向网络、智能家具而设计的,故更加注重传输效率。 劣势:运行时从字节码里构建出具体数据结构,需要花费部分CPU时间,从而导致解释执行字节码会损失部分性能。 二、指令 大多数指令包含了其操作所对应的数据类型信息,比如iload,表示从局部变量表中加载int型的数据到操作数栈;而fload表示加载float型数据到操作数栈。由于操作码长度只有1Byte,因此Java虚拟机的指令集对于特定操作只提供有限的类型相关指令,并非为每一种数据类型都有相应的操作指令。必要时,有些指令可用于将不支持的类型转换为可被支持的...
路上有你0314 发布于 1天前 阅读 53

算法的时间复杂度

  1、时间复杂度  (1)时间频度     一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2)时间复杂度  在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 T (n) = Ο(f (n)) 表示存在一个常数C,使得在当n趋于正无穷时总有 T (n) ≤ C * f(n)。简单来说,就是T(n)在n趋于正无穷时最大也就跟f(n)差不多大。也就是说当n趋于正无穷时T (n)的上界是C * f(n)。其虽然对f(n...
小衰哥有点帅 发布于 2周前 阅读 782 点赞 2

Go圣经-学习笔记入门bufio

ReadSlice容易犯错的方法
cdh0805010 发布于 4天前 阅读 222

服务器扫描发现漏洞-可通过HTTP获取远端WWW服务信息

可通过HTTP获取远端WWW服务信息 [Microsoft-IIS/7.5] 漏洞描述 本插件检测远端HTTP Server信息。这可能使得攻击者了解远程系统类型以便进行下一步的攻击。 解决方案 NSFOCUS建议您采取以下措施以降低威胁     处理方法: 1.实现IHttpModule接口 将Response Headers 相应信息移除 2.在web.config的<httpProtocol>的 <customHeaders>子节点中添加    <remove name="X-Powered-By"/>节点     public  class HeaderFilterHttpModule: IHttpModule     {         public void Init(HttpApplication context)         {             context.PreSendRequestHeaders += OnPreSendRequestHeaders;         }         public void Dispose()         { }         void OnPreSendRequestHeaders(object sender, System.EventArgs e)         {             //过滤掉 Response Headers 的banner ,以隐藏服务器和平台信息             HttpContext.Current.Response.Headers.Remove("Server");             HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");             HttpContext.Current....
AIU_GS 发布于 3个月前 阅读 984

Spring思维导图,让Spring不再难懂(aop篇)

>什么是aop AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 ![什么是aop.png](http://upload-images.jianshu.io/upload_images/4120002-5034371a4f0eb2b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 >aop使用场景 aop框架种类 * AspectJ * JBoss AOP * Spring AOP 使用aop可以做的事情有很多。 * 性能监控,在方法调用前后记录调用时间...
java思维导图 发布于 3个月前 阅读 802 点赞 2

day3作业【if/while运用】

import java.util.Scanner; //输入分数 //60以下学渣 //60~70 2b青年 //70~80普通青年 //80~90文艺青年 //90~100学霸 public class Testswitch { public static void main(String args[]) { Scanner in = new Scanner(System.in); int point = in.nextInt(); if (point >= 0 && point < 101) { do { if (point < 60) { System.out.println("学渣"); } else if (point >= 60 && point < 70){ System.out.println("2b青年"); } else if (point >= 70 && point < 80){ System.out.println("普通青年"); } else if (point >= 80 && point < 90){ System.out.println("文艺青年"); } else if (point >= 90 && point <= 100){ System.out.println("学霸"); } point = in.nextInt(); } while (point >= 0 && point < 101); } else { System.out.println("请输出正确的数字"); } System.out.println("END"); } } 作业1:学渣判断器 public class Nine { //九九乘法表 //1*1=1 //1*2=2 2*2=4 //1*3=3 2*3=6 3*3=9 //............... public static void main (String a...
robot_man 发布于 6天前 阅读 40

从客户端中检测到有潜在危险的 request.form值

    问题原因:由于在asp.net中,Request提交时出现有html代码或javascript等字符串时,程序系统会认为其具有潜在危险的值。环境配置会报出“从客户端 中检测到有潜在危险的Request.Form值”这样的Error。 1、当前提交页面,添加代码 打开当前.aspx页面,页头加上代码:validateRequest=”false”,如: <%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="false" CodeFile="default.aspx.cs" Inherits="default" %> 2、全局修改web.config配置文件(此举不建议、不安全) 打开web.config文件,在<system.web></system.web>中间,加上如下代码: <pages validateRequest="false" /> 如果以上两种方法都无法解决,请接着往下看, 问题原因:由于你当前的.net ifreamwork框架环境是4.0 3、同样,打开web.config配置文件,在<system.web></system.web>中间,加上代码: <httpRuntime requestValidationMode="2.0" /> 4、如果你的网站程序本身是net 2.0环境开发的,但放到了VS2010软件里运行,也会出现这种情况,你可以把运行解决方案切换成net2.0即可. 5、另一种处理方法:原因是所传值含有特殊危险符号,那么可以在传前,利用Server.HtmlEncode(string)...
贱鱼 发布于 2分钟前

实现java接口的实现类中添加@Override,编译过程中出现Error:java: Compilation failed: internal java compiler error

实现java接口的实现类中添加@Override,编译过程中出现Error:java: Compilation failed: internal java compiler error
芝麻科技 发布于 25分钟前

vue 路由

简单路由和传参路由  <div id='myDiv' class="container"> <div> <!--路由链接--> <h1>简单路由</h1> <router-link to='/home'>Home</router-link> <router-link to='/about'>About</router-link> <router-link to='/more'>More</router-link> </div> <br> <br> <div> <h1>传参路由</h1> <router-link to='/user/ahao'>'/user/ahao'</router-link> <router-link to='/admin/ahao'>'/admin/ahao'</router-link> <router-link to='/admin/?page=1'>分页查询</router-link> </div> <!--显示对应路由的组件--> <router-view></router-view> </div> </body> <script> //路由匹配 var routes = [ { path: '/', component: { template: '<h1>Home</h1>' } }, { path: '/home', component: { template: '<h1>Home</h1>' } }, { path: '/about', component: { ...
阿豪boy 发布于 54分钟前 阅读 1

vue 父子组件通讯

使用属性传参,可以在父组件中向子组件传递数据 使用事件发送,可以在子组件向父组件发送事件和数据   <div id="myDiv" class="container"> <!--属性传参--> <alter msg='hello alter'>alter</alter> <user-url username='ahao'></user-url> <!--父子通信--> <!--点击子组件的按钮,父组件显示信息--> <father></father> <father></father> </div> </body> <template id='father'> <div> father header:<br> <son @son_event='father_handler'></son> father:footer<br> <h1>父组件收到的子组件的信息信息:{{from_son}}</h1> </div> </template> <template id='son'> <div> son header<br> son footer<br> <input v-model="son_msg"> <button @click='son_click'>发送给父组件</button> </div> </template> <template id='alter'> <button @click='btn_click'>点击</button> </template> <template id='user-url'> <!--必须使用绑定属性--> <a :href="'user/'+username"> {{username}} </a> </template> <script> Vue.co...
阿豪boy 发布于 55分钟前

vue 同级或任意组件通讯

使用全局变量达到这一点 <div id="myDiv" class="container"> <!--借助一个全局变量保存和监听事件--> <aaa></aaa> <bbb></bbb> </div> </body> <script> var E = new Vue() Vue.component('aaa', { template: "<div>A:<input type='text' @keyup='say' v-model='a_words'><br>a:words{{a_words}}</div>", data: function () { return { a_words: '', } }, methods: { say: function () { E.$emit('a-say', this.a_words) } } }) Vue.component('bbb', { template: "<div>b:a-words:{{ab_words}}</div>", data: function () { return { ab_words: '', } }, mounted: function () { console.log('b-mounted') var me = this E.$on('a-say', function (data) { me.ab_words = data }) } }) new Vue({ el: "#myDiv", compontent: {} ...
阿豪boy 发布于 55分钟前

js 基础

使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象; 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升; 使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。  function a() { console.log('a:before') for (var i = 0; i < 3; i++) console.log(i) console.log(i) //会输出3 console.log('a:after') } function b() { console.log('b:before') for (let i = 0; i < 3; i++) console.log(i) // console.log(i) 错误 console.log('b:after') } function c() { const i = 1 console.log('c:'+i) // i = 2 //错误 const stu={name:'aaa',age:10} //对象没有改变,但是对象的数据发生了改变 console.log(stu) stu.name='bbb' console.log(stu) } a() b() c()     a:before bs_var.html:23:9 0 bs_var.html:25:13 1 bs_var.html:25:13 2 bs_var.html:25:13 3 bs_var.html:26:9 a:after bs_var.html:2...
阿豪boy 发布于 55分钟前

webpack 入门

cnpm init -y cnpm install cnpm install webpack 完成简单项目构建 package.json { "name": "test_webpack", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "pack": "webpack src/js/main.js ./dist/boundle.js" }, "keywords": [], "author": "", "license": "ISC" } webpack.config.js var path = require('path') var webpack = require('webpack') module.exports = { entry:{ // './src/js/main.js', main:'./src/js/main.js', stu:'./src/js/stu.js', } , output: { path: path.resolve(__dirname, './dist'), publicPath: '/dist/', filename: '[name].js' } }   项目结构 main.js import stu from './stu' console.log(stu) function f(){ console.log('main.js : hello') } f()   stu.js var stu = { name:'ahao', sex:'男', score:60 } // export(stu) export default stu // module.export({ // stu:stu // }) index.html <script src='../../dist/main.js'></sc...
阿豪boy 发布于 55分钟前

使用Referer实现防盗链防下载

使用File来实现 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //获取链接 String referer=req.getHeader("referer"); //获取本电脑ip地址 String serverName=req.getServerName(); if(referer==null||!referer.contains(serverName)||referer.contains("mp4")){ req.getRequestDispatcher("/images/timg.jpg").forward(req, res); return; } chain.doFilter(req, res); } <filter> <filter-name>RefererFilter</filter-name> <filter-class>com.enet.fileter.RefererFilter</filter-class> </filter> <filter-mapping> <filter-name>RefererFilter</filter-name> <url-pattern>/mp4/*</url-pattern> </filter-mapping>   如上代码就实现了防盗链防下载功能, 防盗链指的是在网站上无法通过资源的链接直接访问到 防下载指的是在下载软件中无法用过资源的链接下载到对应的资...
神人啊啊 发布于 2小时前 阅读 1

浅谈Java中JSON的序列化问题

在Java Web开发的过程中,时常会遇到与自己预期不一样的情况。有的时候静下心来自己去研究一番内在的原因还是很有趣的。这两天在写java web的时候,碰到了一个对象序列化的问题,问题大概是这样的: public class AjaxJson {     private boolean success;     private String msg;     private Object obj;     private Map<String, Object> attributes;     //getter and setter     public String getJsonStr() {         JSONObject obj = new JSONObject();         obj.put("success", this.isSuccess());         obj.put("msg", this.getMsg());         obj.put("obj", this.obj);         obj.put("attributes", this.attributes);         return obj.toJSONString();     } } 上面是一个接口类,我们需要把这个类的对象序列化成json返回。那么在springmvc中,一般是这样操作的。 @RequestMapping(params = "/get") @ResponseBody public AjaxJson del(HttpServletRequest request) {     AjaxJson json = new AjaxJson();     //省略业务操作     return json; } 默认的话,返回ResponseBody,对象会直接序列化...
小欣妹妹 发布于 2小时前 阅读 1

Go圣经-学习笔记之复合类型(三)

json的简单使用
cdh0805010 发布于 2小时前 阅读 20

令人抓狂的代码 - 万能正则表达式.*陷阱

令人抓狂的代码 - 万能正则表达式.*陷阱
joymufeng 发布于 2小时前 阅读 41 点赞 1

ERRORLEVEL的含义及配合CHOICE进行脚本人工选择

ERRORLEVEL变量和CHOICE命令
seanking 发布于 3小时前 阅读 2

SVN提交到老分支补救指南;)

1. 生成补丁: ```shell svn diff old_branch_url new_branch-url >/tmp/patch ``` 2. 对已经切换到新分支的工作目录应用补丁: ```shell patch -p0 < /tmp/patch ```
yx91490 发布于 4小时前 阅读 4

java Web源码电子商务平台 b2b2c o2o

鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B、B2C、C2C、O2O、新零售、直播电商等子平台。 分布式、微服务、云架构电子商务平台 java b2b2c o2o 技术解决方案 开发语言: java、j2ee 数据库:mysql JDK支持版本: JDK1.6、JDK1.7、JDK1.8版本 通用框架:maven+springmvc+mybatis+spring cloud+spring boot+redis 核心技术:分布式、云服务、微服务、服务编排 核心架构: 使用Spring Cloud分布式微服务云架构进行服务化开发,所有模块功能完全解耦,提供服务发现、注册、配置中心、消息总线、负载均衡、断路器、数据监控等。 技术列表: Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion Spring Cloud Bus 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署 Eureka 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。 Hystrix 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。 Zu...
valiant025 发布于 4小时前

PHP 自动加载机制

<?php function classLoader($class) { $path = str_replace('\\', DIRECTORY_SEPARATOR, $class); $file = __DIR__ . '/src/' . $path . '.php'; if (file_exists($file)) { require_once $file; } } spl_autoload_register('classLoader'); require_once __DIR__ . '/src/common/functions.php';  
Mading_EVE 发布于 5小时前 阅读 5

Python的数据类型二

1、  列表 列表是由序列特定顺序排列的元素组成。可以把字符串,数字,字典等任何东西加入到列表,列表是自带下标的,默认从0开始。   str1 = “abcdefghejklmn” print(list(str1))   a = [‘a’, ‘b’, ‘c’, ‘abc’,123] print(a) print(type(a))   print(dir(a)) #查看列表的方法 append(追加) index(符合条件的下标) insert(插入list中的一个元素) pop(末尾删除一个list元素) remove(删除list中的一个元素) reverse(list反序) sort(对list进行排序)         a.append(‘hello’) #在a的列表最后追加字符串‘hello’       print(a.index(‘abc’)) #查看abc在a列表的下标,跟find意义相近   a.insert(0, ‘null’) #在0下标上插入null字符 print(a)     a.remove(‘abc’) #删除list中的abc字符串   a.sort() #对list进行排序 print(a)     a.reverse() #对list进行反向排序 print(a)   切片 切片的时候,取的是最后一位,数字-1   print(a[3:]) #取list下标3到最后的元素 print(a[1:5]) #取list下标1到4的元素 print(a[1:5:2]) #取list下标1到4的元素,步进值为2,间隔为2         2、  元组 Tuple可以理解为不可变的lis...
peizh 发布于 12小时前 阅读 5

python列表,元组,字典

列表: a = ['a', 'b', 'c', 'abc', 1, 2, 3] print a   # append默认添加在最后 a.append(4) print a 输出:['a', 'b', 'c', 'abc', 1, 2, 3, 4]   # index方法能够查看列表中4这个元素的下标索引是多少 print (a.index(4)) 输出:7   # 使用insert方法能够向列表中插入元素 a.insert(2,'hh') print a 输出:['a', 'b', 'hh', 'c', 'abc', 1, 2, 3, 4]   # 默认删除最后一位,可以添加下标删除 a.pop(7) print a 输出:['a', 'b', 'hh', 'c', 'abc', 1, 2, 4]   # 使用remove方法能够删除掉列表中a这个元素 a.remove('a') print a 输出:['b', 'hh', 'c', 'abc', 1, 2, 4]   # 使用sort方法可以针对列表进行排序,但是列表中需要全是数字或字符串,不能既有数字也有字符串 b = [1, 2, 8, 9, 5, 6, 7] b.sort() print (b) 输出:[1, 2, 5, 6, 7, 8, 9]   # 使用reverse可以针对列表进行反序排序 b.reverse() print(b) 输出:[9, 8, 7, 6, 5, 2, 1]   字符串,可以进行索引和切片操作,字符串是不可变的,可迭代的 a=‘abcd’ a[0] 为a a[2] 为c a[0:2] 为ab    (从0开始取2个,省略0为从第一个开始,省略最后为直接取到最后一个) a[0:4:2] 为ad    (从0开始取,...
粗粮面包 发布于 13小时前 阅读 3

java从sql server读取text类型字段

sql server中text类型字段,用sql语句获取时,java要用Clob类型相对应。 1.将 获取的对象强转为Clob类型; 2.将Clob类型转换为String类型 /* * 将Clob类型转化为String类型 */ public static String ClobToString(Clob clob) { String str = ""; try { Reader is = clob.getCharacterStream(); BufferedReader br = new BufferedReader(is); String s = br.readLine(); StringBuffer sb = new StringBuffer(); while (s != null) { sb.append(s); s = br.readLine(); } str = sb.toString(); } catch (Exception e) { e.printStackTrace(); } return str; }  ...
gAKey 发布于 13小时前 阅读 1

最最简单的spring例子

 bean类 package hello; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HelloWorld { private String Msg; public void Hello() { System.out.println("Hello:" + Msg); } @Bean(name = "helloworldbean") public HelloWorld helloWorldBean() { HelloWorld hw = new HelloWorld(); hw.Msg = "How are you ?"; return hw; } } 测试类: package hello; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestHelloWorld { /** * @param args */ private static ApplicationContext ctx; public static void main(String[] args) { // TODO 自动生成的方法存根 ctx = new AnnotationConfigApplicationContext(HelloWorld.class); HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloworldbean"); helloWorld.Hello(); } } 运行结果: 2017-10-24 00:34:15 [org.springframework.context.annotation.Annotati...
wangxuwei 发布于 13小时前 阅读 4

maven添加sqljdbc4.jar,并引用

在sqljdbc4.jar的路径下,打开命令行输入: mvn install:install-file -Dfile=sqljdbc4.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 对jar包进行安装,输入结果如下: [INFO] Scanning for projects... Downloading: http://maven.aliyun.com/nexus/content/repositories/central/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Downloaded: http://maven.aliyun.com/nexus/content/repositories/central/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (3.9 kB at 16 kB/s) [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom --- [INFO] Installing C:\Users\pengu\Desktop\连发工具\sqljdbc4.jar to D:\Applications\apache-maven\.m2\repository\com\microsoft\sqlserver\sqljdbc4\4...
杰克鹏仔 发布于 13小时前 阅读 4

一张思维导图,让正则表达式不再难懂

一张精彩的导图  关注公众号回复“正则导图”即可下载xmind源文件   导图内容解析 语法结构 字符 普通字符:字母、数字、汉字、下划线,匹配与之相同的一个字符 简单转义字符:\n(换行),\t(制表),\\(\本身)和 \^...(\^等有特殊作用的符号如要匹配自己的话要用转义) 标准字符集合 注意区分大小写,大写是相反的意思,匹配相反是不匹配 \d 任意一个数字,0~9 \w 任意一个字母、数字、汉字或下划线,A~Z、a~z、0~9、_和任意一个汉字 \s 任意空白符,包括空格、制表符、换行符 . 小数点可以匹配任意一个字符,换行除外(如果要匹配包括"\n"在内的所有字符,一般用[\s\S]) 自定义字符集合 [ ]方括号匹配方式,能够匹配方括号中的任意一个字符,^表示取反 [ab5@] 匹配"a"或"b"或"5"或"@" [^abc] 匹配a、b、c之外的任意字符 [f-k] 匹配“f"到"k"之间的字符 [^A-F0-3] 匹配“A"-"F","0"-"3"之外的任意一个字符 量词(Quantifier) 修饰前面的一个表达式,如果要修饰多个表达式,就用( )把表达式包起来 {n} 表达式重复n次​ {m,n} 表达式至少重复m次,最多重复n次 贪婪模式 (默认) 匹配符合的最长的字符串 非贪婪模式 (在量词后面加 ? 例:{m,n}? ) 匹配符合的最短的字符...
java思维导图 发布于 1周前 阅读 10280 评论 23 点赞 44

Java9之HttpClientAPI实战详解

Java9之HttpClientAPI实战详解 前言 相信关注java9的小伙伴们都知道java9版本内置模块提供了Http功能,当然并不是说之前jdk之前并不支持,那么这次更新又多了什么呢?或者是解决了什么问题? 说明 自JDK 1.0以来,Java已经支持HTTP/1.1。 HTTP API由java.net包中的几种类型组成。 现有的API有以下问题: 它被设计为支持多个协议,如http,ftp,gopher等,其中许多协议不再被使用。 太抽象了,很难使用。 它包含许多未公开的行为。 它只支持一种模式,阻塞模式,这要求每个请求/响应有一个单独的线程。 2015年5月,IETF(Internet Engineering Task Force)发布了HTTP/2规范。 有关HTTP/2规范的完整文本,请访问https://tools.ietf.org/html/rfc7540。 HTTP/2不会修改应用程序级语义。 也就是说,对应用程序中的HTTP协议的了解和使用情况并没有改变。 它具有更有效的方式准备数据包,然后发送到客户端和服务器之间的电线。 所有之前知道的HTTP,如HTTP头,方法,状态码,URL等都保持不变。 HTTP/2尝试解决与HTTP/1连接所面临的许多性能相关的问题: HTTP/2支持二进制数据交换,来代替HTTP/1.1支持的文本数据。 HTTP/2支持多路复用和并发,这意味着多个数据交换可以同时发生...
路上有你0314 发布于 3周前 阅读 2940 评论 6 点赞 6

Java9新特性——module模块系统

官方文档:https://docs.oracle.com/javase/9/index.html 关于 java9的新特性,官方原文:https://docs.oracle.com/javase/9/whatsnew/toc.htm 这玩意就是一个列表,具体的技术细节需要根据官方文档挖一挖。 modular-模块系统 --- java9的模块化,从一个独立的开源项目而来,名为Jigsaw。 项目官网:http://openjdk.java.net/projects/jigsaw/ ### 为什么要使用模块化 java开发者都知道,使用java开发应用程序都会遇到一个问题,Jar hell,他就像windows里的dll hell。 比如我们启动一个不算大的应用,但依赖了很多的jar,如下图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094041_w0RP.png "在这里输入图片标题") 摘自:Mark Reinhold的演讲 https://www.youtube.com/watch?v=l1s7R85GF1A 这是很常见的。虽然你可以使用 "java -Djava.ext.dirs=lib xxx" 让命令行小一些,但不可否认,他的classpath就是那么长。顺便说一句,java9中不允许使用extdirs了。 另一方面,jdk本身有很多的api: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094131_JZAh.png "在这里输入图片标题") 对于一些小设备,它太庞大了。 ### helloworld...
polly 发布于 1个月前 阅读 5427 评论 33 点赞 22 打赏 1

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

Java平台,标准版Oracle JDK 9中的新功能

Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月   JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个主要的功能版本。以下总结了Java SE 9和JDK 9的特点和增强功能,Oracle 对于 Java SE 9的实现。 JDK增强提案(JEP)是对JDK设计和实施非常重要更改的提案。参阅JEP 1:JDK增强提案和路线图流程。Java规范请求(JSR)描述了Java平台的建议和最终规范。请参阅JSR概述。   JDK 9中的重要变化 这些变化影响了多个技术领域。 特征 描述 Java平台模块系统 推出了一种新的Java编程组件--模块,是一个指定的,自描述代码和数据的集合。 模块系统: 引入一个新可选阶段,link time,它在编译和运行时之间,在此期间,可以将一组模块组合并且优化到一个自定义的运行时映像中;在 Java Platform, Standard Edition Tools Reference 中查看 jlink 工具。 添加选项到工具javac,jlink和java,可以指定模块路径在哪里,哪一个定义模块的定位。 引入模块化JAR文件,它是一个在根目录下包含module-info.class的JAR文件。 推出JMOD格式,它是一种类似于JAR的打包格式,除了它可以包含原生代码和配置文件外; 参见jmod工具。 JDK本身已经被分为一组模...
GuoMengYue 发布于 1个月前 阅读 7419 评论 26 点赞 18

LinkedList的实现原理浅析

本文简单分析一下JDK1.7的LinkedList源码,看一下其内部的结构以及典型方法的实现~ LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Cloneable以及Serializable接口,如: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { } 也就意味着: LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能对它进行列表操作。 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。 LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。   public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || ...
王孟君 发布于 1个月前 阅读 2115 评论 7 点赞 5

HashMap的实现原理浅析

HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。  HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 本文使用的是JDK1.7的HashMap源码,因为JDK1.8的HashMap改变还很多,以后再去单一分析。 HashMap内部结构 查看HashMap源代码,可以发现其继承自AbstractMap, 并实现了Map, Cloneable, Serializable接口~ public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap包含一个数组对象table[], /** * The table, resized as necessary. Length MUST Always be a power of two. */ transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; 数组中包含的元素为Entry对象,Entry是HashMap中定义的静态内部类,内容如下: static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash; /** * Creates new entry. */ ...
王孟君 发布于 2个月前 阅读 3230 评论 9 点赞 9

曲线点抽稀算法-Python实现

## 何为抽稀 >在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不光滑或不符合标准。因此要通过某种规则,在保证矢量曲线形状不变的情况下, 最大限度地减少数据点个数,这个过程称为抽稀。 通俗的讲就是对曲线进行采样简化,即在曲线上取有限个点,将其变为折线,并且能够在一定程度保持原有形状。比较常用的两种抽稀算法是:道格拉斯-普克(Douglas-Peuker)算法和垂距限值法。 ## 道格拉斯-普克(Douglas-Peuker)算法 Douglas-Peuker算法(DP算法)过程如下: * 1、连接曲线首尾两点A、B; * 2、依次计算曲线上所有点到A、B两点所在曲线的距离; * 3、计算最大距离D,如果D小于阈值threshold,则去掉曲线上出A、B外的所有点;如果D大于阈值threshold,则把曲线以最大距离分割成两段; * 4、对所有曲线分段重复1-3步骤,知道所有D均小于阈值。即完成抽稀。 这种算法的抽稀精度与阈值有很大关系,阈值越大,简化程度越大,点减少的越多;反之简化程度越低,点保留的越多,形状也越趋于原曲线。 下面是Python代码实现: ```python # -*- coding: utf-8 -*- """ -----------------...
j_hao104 发布于 2个月前 阅读 1208 评论 3 点赞 2

PHP实现依赖注入

控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征。控制反转(IOC)是一种思想,依赖注入(DI)是实施这种思想的方法。
o0无忧亦无怖 发布于 2个月前 阅读 2155 评论 38 点赞 8

Java使用Hutool实现AES、DES加密解密

在Java世界中,AES、DES加密解密需要使用Cipher对象构建加密解密系统,Hutool中对这一对象做再包装,简化了加密解密过程。
路小磊 发布于 3个月前 阅读 2544 评论 21 点赞 9

SQL注入详解

日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号、密码等互联网信息被盗取的普遍担忧。 网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,由于设计的漏洞导致了不可收拾的恶果,验证了一句话“出来混的,迟早是要还的”,所以我想通过专题博文介绍一些常用的攻击技术和防范策略。 SQL Injection也许很多人都知道或者使用过,如果没有了解或完全没有听过也没有关系,因为接下来我们将介绍SQL Injection。
暴雪首席执行官 发布于 3个月前 阅读 4210 评论 24 点赞 5

使用Spring自定义注解实现任务路由

在Spring mvc的开发中,我们可以通过RequestMapping来配,当前方法用于处理哪一个URL的请求.同样我们现在有一个需求,有一个任务调度器,可以按照不同的任务类型路由到不同的任务执行器。其本质就是通过外部参数进行一次路由和Spring mvc做的事情类似。简单看了Spring mvc的实现原理之后,决定使用自定义注解的方式来实现以上功能。 ### 自定义TaskHandler注解 ```java @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface TaskHandler { String taskType() default ""; } ``` 以上定义了任务处理器的注解,其中@Component表示在spring 启动过程中,会扫描到并且注入到容器中。taskType表示类型。 ### 任务处理器定义 ```java public abstract class AbstractTaskHandler { /** * 任务执行器 * * @param task 任务 * @return 执行结果 */ public abstract BaseResult execute(Task task); } ``` 以上定义了一个任务执行的处理器,其他所有的具体的任务执行器继承实现这个方法。其中Task表示任务的定义,包括任务Id,执行任务需要的参数等。 ### 任务处理器实现 接下来,我们可以实现一个具体的任务处理器。 ```jav...
wangyan9110 发布于 3个月前 阅读 3518 评论 8 点赞 8

Golang依赖管理工具:glide从入门到精通使用

## 介绍 不论是开发Java还是你正在学习的Golang,都会遇到**依赖管理**问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍[gilde](https://github.com/Masterminds/glide)。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: * 能拉取源码的平台很有限,绝大多数依赖的是 github.com * 不能区分版本,以至于令开发者以最后一项包名作为版本划分 * 依赖 列表/关系 无法持久化到本地,需要找出所有依赖包然后一个个 go get * 只能依赖本地全局仓库(GOPATH/GOROOT),无法将库放置于局部仓库($PROJECT_HOME/vendor) ## 安装 ### Golang环境设置 采用vendor目录特性,Go 1.5 做为试验特性加入(需要指定 GO15VENDOREXPERIMENT=1 环境变量),并在 Go 1.6 正式引入的一个概念。多数 go 依赖解决方案都基于它的。GO15VENDOREXPERIMENT 是 Go 1.5 版本新增的一个环境变量,如果将值改为 1 则表示启用。它可以将项目根目录名为 vendor 的目录添加到 Go 的库搜寻路径中,实现一个局部依赖的效果...
梦朝思夕 发布于 3个月前 阅读 3599 评论 22 点赞 9

Spring思维导图,让Spring不再难懂(mvc篇)

>写在前面 生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。 温故而知新,今天一起来复习一下spring mvc的内容吧。 >spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。 ![原理.png](http://upload-images.jianshu.io/upload_images/4120002-9409cf62de5e6d39.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * (1) Http请求:客户端请求提交到DispatcherServlet。 * (2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。 * (3) 调用处理器:DispatcherServlet将请求提交到Controller。 * (4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。 * (6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。 * (8) Http响应:视图负责将结果显示到客户端。 >主要注解 ![spring mvc注解....
java思维导图 发布于 3个月前 阅读 13278 评论 31 点赞 36

java lambda方法引用总结——烧脑吃透

lambda是java8的新特性,基本使用比较容易理解,但有一个环节遇到了坎儿,那就是方法引用,尤其是类的实例方法引用,烧脑之后总结一下。 在需要函数参数的方法中,我们可以把另一个同类型的方法直接传入,这称为方法引用的绑定。类似于C语言中的函数指针。 lambda表达式可以替代方法引用;或者说方法引用是lambda的一种特例,方法引用不可以控制传递参数。 ### 4.1) 构造器引用 ```java private Person construntorRef(Supplier sup){ Person p=sup.get(); return p; } @Test public void testConstructorRef(){ Person p=construntorRef(Person::new); System.out.println(p); } ``` 需要有无参的构造器。 ### 4.2) 静态方法引用 ```java private static void print(String s){ System.out.println(s); } @Test public void testStaticRef(){ Arrays.asList("aa","bb","cc").forEach(TestMethodReference::print); } ``` so easy,只要静态方法的参数列表和FI需要的参数一致就可以。 ### 4.3) 成员方法引用 ```java @Test public void testMemberMethodRef(){ Arrays.asList("aa","bb","cc").forEach(System.out::println); } ``` so easy,只要成员方法的参数列表和FI需...
polly 发布于 5个月前 阅读 4071 评论 21 点赞 8

现代c++开发利器folly教程系列之:dynamic

一、前言        用过python、php等动态类型语言的人肯定对动态数据类型不陌生。对于定义时不确定、运行时才确定的数据类型,使用动态类型是非常方便的。c++是一门不折不扣的静态类型语言,那么是否就无缘享受“动态”类型的好处了呢?不尽然。folly为我们提供了dynamic类型,从一定程度上实现了c++中的“动态”数据类型,为什么说是“一定程度上”呢,因为dynamic类型只支持c++中的基本类型(部分)和复合类型(array和map),不支持自定义类型。你可能会把dynamic和boost::any或std::any(将在c++17中支持)进行对比,但是其实它们没有可比性,首先是它们的实现原理不同。boost::any虽然可以盛放任何类型,但是它在实现上是用继承的方式进行了类型擦除,因此在还原类型时,需要程序员自己显示的提供类型信息,这也是boost::any的缺点之一。而dynamic虽然代表的类型有限,但是dynamic本身可以记住类型,便于赋值和还原。因此,dynamic不是boost::any的替代品,更像是一种补充,如果非要类比的话,dynamic和boost::variant更为相似。 二、类型支持       如前文所述,dynamic可以盛放的类型是有限的,它可以盛放部分基本类型、字符串类型、数组类型和OBJECT(本质为m...
黑客画家 发布于 6个月前 阅读 2770 评论 8 点赞 3

Java泛型总结

什么是泛型 --- 泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。 泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用object并在需要时再强制类型转换的机制具有更好的可读性和安全性。 泛型程序设计意味着程序可以被不同类型的对象重用,类似c++的模版。 泛型对于集合类尤其有用,如`ArrayList`。这里可能有疑问,既然泛型为了适应不同的对象,`ArrayList`本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个`Object`对象的数组。结果就是对List来说它只操作了一类对象`Object`,而在用户看来却可以保存不同的对象。 泛型提供了更好的解决办法——类型参数,如: ```js List list = new ArrayList(); ``` 这样解决了几个问题: 1 可读性,从字面上就可以判断集合中的内容类型; 2 类型检查,避免插入非法类型。 3 获取数据时不在需要强制类型转换。 泛型类 --- ```java public class Pair{ private T field1; } ``` 其中 `` 是类型参数定义。 使用时:`Pair p = new Pair();` 此时类内部的`field1`就是字符串类型了。 如果引用多个类型,可以使用逗号...
polly 发布于 6个月前 阅读 5166 评论 8 点赞 18

SSM(十一) 基于dubbo的分布式架构

![dubbo.jpg](https://ooo.0o0.ooo/2017/04/06/58e649d664665.jpg) # 前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的`SSM`项目来让第一次接触的同学能快速上手。 # 浅谈分布式架构 `分布式架构`单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。 > 我们拿一个电商系统来说: ## 单系统 ![E65B5547-AF84-4D31-836D-72892C7AC7EA.png](https://ooo.0o0.ooo/2017/04/06/58e651937130f.png) 对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。 这时候所有的业务逻辑都是在一个项目中就可以满足。 ## 垂直拆分-多应用 ![QQ20170406-230056@2x.jpg](https://ooo.0o0.ooo/2017/04/06/58e65856cf18a.jpg) 当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用`Nginx`进行反向代理和简单的负载均衡。 ## SOA服务化 当整个系统以及发展的足够大的时候,比如一个电商系统中存在有: * 用户系统 * 订单系统 * 支付系统 * 物流系统 等系统。 如果每次修改了其中一个系统就要重新发布上线的话那么耦合就...
crossoverJie 发布于 7个月前 阅读 4655 评论 9 点赞 10

Google Protobuf 协议+Socket实现异步登录

> 背景:公司登录基础服务是C开发,业务是Java开发,需要Java调用C的服务验证登录、获取登录信息 > 实现方式: * 交互通过发送Socket通讯,socket连接池,Google Protobuf 协议,发送心跳保持TCP连接 * 自定义ExecutorCompletionService,实现一个包含Map>> https://github.com/shawntime/shawn-common-utils/tree/master/src/main/java/com/shawntime/common/socket ### Google Protobuf 协议定义 定义.proto文件:头文件(head_outer_class.proto)、登录(login_logic.proto)、心跳(login_proxy.proto) * 字段类型:bool,int32,float,double,string * 支持消息嵌套 * 支持enum * 索引号要按顺序指定 * 字段前缀:required:必须的;optional:可选的;repeated:可以重复的 ``` package qiqi; enum ENUM_HEAD_TYEP { enum_cs_head_type_cs = 0x1; //0x1表示CSHead enum_cs_head_type_sc = 0x2; //0x2表示SCHead enum_cs_head_type_ss = 0x3; //0x3表示SSHead }; enum ENUM_CS_HEAD_COMMAND { enum_cs_head_cmd_medal = 0x1; //勋章系统 enum_cs_head_cmd_login = 0x2; //登录系统 enum_cs_head_cmd_guild = 0x3; //公会推荐 enum_cs_head_cmd_user_info = 0x4; //用户信息 };...
shawntime 发布于 7个月前 阅读 2631 评论 11 点赞 1

Python进阶篇二:Python模块

Python的强大之处有许多,其中重要的一点就是Python包含许多的第三方库。因此,懂得如何制作、导入自制模块或第三方模块就显得非常重要。此外,熟悉python模块的查看方式有利于编程者缩短python语言的学习使用时间。本文从python模块的制作、导入、查看和使用入手,重点介绍在WINDOWS环境下如何处理和使用python模块。最后一部分介绍一些python常用的模块供读者参考。
SamYjy 发布于 7个月前 阅读 2332 点赞 3

花十分钟时间给JFinal写了个talent-aio插件。。。

本人 JFinal脑残粉,最近公司几个项目都需要跟硬件交互,这就得用到长连接,之前一直没接触过该领域,本来还想花时间研究下netty,讲真挺难啃的,找资料的时候翻到 talent-aio,略微了解发现似乎学习成本极低,没想到作者本人也极其nice,解答我这个门外小伙子好多个问题,顺利用上此框架,刚好解了我的燃眉之急。 什么是 talent-aio? talent-aio是基于java aio实现的即时通讯框架,源于作者另一个久经考验的talent-nio框架,但在易用性、性能及代码可读性方面又远远超越了talent-nio。 顺便放上传送门:https://my.oschina.net/talenttan/blog/863545 废话不说,下面正题: 下载talent-aio的demo,demo极其简单,主要还是看HelloAbsAioHandler这个类的编码协议,剩下的就是看Aio的类了,api 貌似都在这。具体不介绍了,上面有链接,要注意的是Client端与Server端协议要一致。在这里说下我之前踩的坑,比如talent-aio的demo代码中的协议是有header的,Server端对客户端没有要求,但必须遵循交互协议,所以若是你用百度出来的socket实例连Server要注意,这里我们用回本身提供的Client代码就可以了。 导入talnet-aio依赖。 <dependency> <groupId>com.tale...
小徐同学 发布于 7个月前 阅读 7487 评论 30 点赞 28 打赏 1
顶部