Java 有哪些特点被我认为汉字的特点有很蠢

&&8309 阅读
假设你要在一个交易(事务)处理系统中编写一个新组件。这个系统的简化视图如图7-1所示。
图7-1 交易处理系统的例子
在图中可以看到,系统有两个数据源:上游的收单系统(可以通过Web服务查询)和下游的派发数据库。
这是一个很现实的系统,是Java开发人员经常构建的系统。我们在这一节里准备引入一小段代码把两个数据源整合起来。你会看到Java解决这个问题有点笨拙。之后我们会介绍函数式编程的一个核心概念,并展示一下怎么用映射(map)和过滤器(filter)等函数式特性简化很多常见的编程任务。你会看到Java由于缺乏对这些特性的直接支持,编程会困难不少。
我们需要一个整合系统来检查数据确实到了数据库。这个系统的核心是reconcile()方法,它有两个参数:sourceData(来自于Web服务的数据,归结到一个Map中)和dbIds。
你需要从sourceData中取出main_ref键值,用它跟数据库记录的主键比较。代码清单7-1是进行比较的代码。
代码清单7-1 整合两个数据源
public void reconcile(List&Map&String, String&& sourceData,
Set&String& dbIds) {
Set&String& seen = new HashSet &String&();
MAIN: for (Map&String, String& row : sourceData) {
String pTradeRef = row.get(&main_ref&); //假定pTradeRef永远不会为null
if (dbIds.contains(pTradeRef)) {
System.out.println(pTradeRef +& OK&);
seen.add(pTradeRef);
System.out.println(&main_ref: &+ pTradeRef +& not present in DB&);
for (String tid : dbIds) {
//特殊情况
if (!seen.contains(tid)) {
System.out.println(&main_ref: &+ tid +& seen in DB but not Source&);
这里主要是检查收单系统中的所有订单是否都出现在派发数据库里。这项检查由打上了MAIN标签的for循环来做。
还有另外一种可能。比如有个实习生通过管理界面做了些测试订单(他没意识到这些订单用的是生产系统)。这样订单数据会出现在派发数据库里,但不会出现在收单系统中。
为了处理这种特殊情况,还需要一个循环。这个循环要检查所见到的集合(同时出现在两个系统中的交易)是否包含了数据库中的全部记录。它还会确认那些遗漏项。下面是这个样例的一部分输出:
7172329 OK
main_ref: 1R6H2 not present in DB
main_ref: 1R6H3 not present in DB
哪儿出错了?原来是上游系统不区分大小写而下游系统区分,在派发数据库里表示为1R6H12的记录实际上是1r6h2。
如果你检查一下代码清单7-1,就会发现问题出在contains()方法上。contains()方法会检查其参数是否出现在目标集合中,只有完全匹配时才会返回true。
也就是说其实你应该用containsCaseInsensitive()方法,可这是一个根本就不存在的方法!所以你必须把下面这段代码
if (dbIds.contains(pTradeRef)) {
System.out.println(pTradeRef +& OK&);
seen.add(pTradeRef);
System.out.println(&main_ref: &+ pTradeRef +& not present in DB&);
换成这样的循环:
for (String id : dbIds) {
if (id.equalsIgnoreCase(pTradeRef)) {
System.out.println(pTradeRef +& OK&);
seen.add(pTradeRef);
continue MAIN;
System.out.println(&main_ref: &+ pTradeRef +& not present in DB&);
这看起来比较笨重。只能在集合上执行循环操作,不能把它当成一个整体来处理。代码既不简洁,又似乎很脆弱。
随着应用程序逐渐变大,简洁会变得越来越重要——为了节约脑力,你需要简洁的代码。
函数式编程的基本原理
希望上面的例子中的两个观点引起了你的注意。
将集合作为一个整体处理要比循环遍历集合中的内容更简洁,通常也会更好。
如果能在对象的现有方法上加一点点逻辑来调整它的行为是不是很棒呢?
如果你遇到过那种基本就是你需要,但又稍微差点儿意思的集合处理方法,你就明白不得不再写一个方法是多么沮丧了,而函数式编程(FP)恰好搔到了这个痒处。
换种说法,简洁(并且安全)的面向对象代码的主要限制就是,不能在现有方法上添加额外的逻辑。这将我们引向了FP的大思路:假定确实有办法向方法中添加自己的代码来调整它的功能。
这意味着什么?要在已经固定的代码中添加自己的处理逻辑,就需要把代码块作为参数传到方法中。下面这种代码才是我们真正想要的(为了突出,我们把这个特殊的contains()方法加粗了):
if (dbIds.contains(pTradeRef, matchFunction)) {
System.out.println(pTradeRef +& OK&);
seen.add(pTradeRef);
System.out.println(&main_ref: &+ pTradeRef +& not present in DB&);
如果能这样写,contains()方法就能做任何检查,比如匹配区分大小写。这需要能把匹配函数表示成值,即能把一段代码写成“函数字面值”并赋值给一个变量。
函数式编程要把逻辑(一般是方法)表示成值。这是FP的核心思想,我们还会再次讨论,先看一个带点儿FP思想的Java例子。
映射与过滤器
我们把例子稍微展开一些,并放在调用reconcile()的上下文中:
reconcile(sourceData, new HashSet&String&(extractPrimaryKeys(dbInfos)));
private List&String& extractPrimaryKeys(List&DBInfo& dbInfos) {
List&String& out = new ArrayList&&();
for (DBInfo tinfo : dbInfos) {
out.add(tinfo.primary_key);
extractPrimaryKeys()方法返回从数据库对象中取出的主键值(字符串)列表。FP粉管这叫map()表达式:extractPrimaryKeys()方法按顺序处理List中的每个元素,然后再返回一个List。上面的代码构建并返回了一个新列表。
注意,返回的List中元素的类型(String)可能跟输入的List中元素的类型(DBInfo)不同,并且原始列表不会受到任何影响。
这就是“函数式编程”名称的由来,函数的行为跟数学函数一样。函数f(x)=x*x不会改变输入值2,只会返回一个不同的值4。
便宜的优化技巧
调用reconcile()时,有个实用但小有难度的技巧:把extractPrimaryKeys()返回的List传入HashSet构造方法中,变成Set。这样可以去掉List中的重复元素,reconcile()方法调用的contains()可以少做一些工作。
map()是经典的FP惯用语。它经常和另一个知名模式成对出现:filter()形态,请看代码清单7-2。
代码清单7-2 过滤器形态
List&Map&String, String&& filterCancels(List&Map&String, String&& in) {
List&Map&String, String&& out = new ArrayList&&();
//防御性复制
for (Map&String, String& msg : in) {
if (!msg.get(&status&).equalsIgnoreCase(&CANCELLED&)) {
out.add(msg);
注意其中的防御性复制,它的意思是我们返回了一个新的List实例。这段代码没有修改原有的List(filter()的行为跟数学函数一样)。它用一个函数测试每个元素,根据函数返回的boolean值构建新的List。如果测试结果为true,就把这个元素添加到输出List中。
为了使用过滤器,还需要一个函数来判断是否应该把某个元素包括在内。你可以把它想象成一个向每个元素提问问题的函数:“我应该允许你通过过滤器吗?”
这种函数叫做谓词函数(predicate function)。这里有一个用伪代码(几乎就是Scala)编写的方法:
(msg) -& { !msg.get(&status&).equalsIgnoreCase(&CANCELLED&) }
这个函数接受一个参数(msg)并返回boolean值。如果msg被取消了,它会返回false,否则返回true。用在过滤器中时,它会过滤掉所有被取消的消息。
这就是你想要的。在调用整合代码之前,你需要移除所有被取消的订单,因为被取消的订单不会出现在派发数据库中。
事实上, Java 8准备采用这种写法(受到了Scala和C#语法的强烈影响)。我们在第14章还会讨论这个主题,但在那之前我们会遇到几次函数字面值(也称为lambda表达式)。
我们接着往下看,讨论一下其他情况,从JVM上可用的语言类型开始(有时候我们也把这称为语言生态学)。
本文摘自即将上市的
预计7月15号可上市。
当当、京东、互动均在预售。
关于本书封面
本书封面上的画像标题为“卖花人”,摘自19世纪法国出版的沙利文o马雷夏尔(Sylvain Maréchal)四卷本的地域服饰风俗纲要。其中每幅插图都是手工精心绘制并上色的。马雷夏尔这套书展示的丰富服饰,令我们强烈感受到200年前的乡村及城镇的巨大文化差异。不同地域的人山水阻隔,言语不通。无论奔走于街巷,还是驻足于乡间,通过他们的服饰,一眼就能看出他们的生活场所、职业,以及生活境况。
时过境迁,书中描绘的那些区域性服饰差异到如今已经不复存在。即使是不同国家,都很难再看出人们着装的区别,再不必说市镇和乡村了。或许,我们今天多姿多彩的人生,正是从前那些文化差异的体现。只不过,如今的生活更加多元,而且技术环境下的生活节奏也要快得多。
今时今日,计算机图书层出不穷,Manning就以马雷夏尔这套书中多样性的图片,来表达对IT行业日新月异的发明与创造的赞美。
人民邮电出版社信息技术分社市场部线上负责人
郭志敏 主要负责线上活动、书评
网店【当当、卓越、互动、京东】
社区维护【开源中国、CSDN、博客园、iteye等】
负责的官方微博:
个人新浪微博:
豆瓣小站:http://site.douban.com/107552/
我的豆瓣:http://www.douban.com/people/guozhimin/
豆瓣小组:http://www.douban.com/group/turingbook/
本书分为四部分,第一部分全面介绍了Java 7的新特性,第二部分探讨Java关键编程知识和技术,第三部分讨论J...14:19 提问
java中泛型的作用和意义是什么
java中的泛型,它的作用和意义是什么???为什么要使用泛型
按赞数排序
以下是百度出的答案,这种作用意义的,百度一般都有的
泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
泛型的好处
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。
这带来了很多好处:
1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型在使用中还有一些规则和限制:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class&?& classType = Class.forName(Java.lang.String);
泛型就是对参数类型的增强。允许一些自定义类型作为泛型的参数类型
假如你写了一个链表类,存放的数据是int
然后过了几天你突然有地方又用到链表了,但是这次存的是double
怎么办?重写一遍,就把数据类型改成double?太蠢了,所以这就是泛型存在的意义,只要你声明的时候指定一下,想用double用double,想存int存int
简单来讲,比如说一个容器中可以放一些规定的东西,但是规定之外的就不能放进去,这时候就需要泛型加以限制。比如集合中只能存放对象,就可以使用泛型List list,为了更确定存储的类型,比如只能存储字符串,这时List list.除了泛型规定之外的东西就不能存放到容器中去。总之就是用来限制一定的范围。
java 泛型是java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。
因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:
Map m = new HashMap();
m.put("key", "blarg");
String s = (String) m.get("key");
要让程序通过编译,必须将 get() 的结果强制类型转换为 String,并且希望结果真的是一个 String。但是有可能某人已经在该映射中保存了不是 String 的东西,这样的话,上面的代码将会抛出 ClassCastException。
理想情况下,您可能会得出这样一个观点,即 m 是一个 Map,它将 String 键映射到 String 值。这可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。
泛型的好处
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。
这带来了很多好处:
1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型在使用中还有一些规则和限制:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class&?& classType = Class.forName(Java.lang.String);
泛 型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的 功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。
泛型只是在编译前对数据类型的统一检验,确保安全,之后就没啥事了。你可以通过反射将完全不同的数据放到一个List中去。表达描述不是很正规,就是这意思吧!
声明的方式:
&数据类型&
泛型可以使用在 类,接口,方法上
1.声明和使用的占位符必须一致,严格区分大小写
2.静态方法必须自己独立声明
泛型的好处
A:将运行期遇到的问题转移到了编译期
B:省去了类型强转的麻烦
泛型高级(通配符):
泛型通配符&?&
泛型类型不确定时,可以通过通配符&?&表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐Java 有哪些特点被认为很蠢_百度知道
Java 有哪些特点被认为很蠢
我有更好的答案
这也得益于它的语法严谨了3 受当时的环境影响,有历史局限性的Java也在调整以适应新的编程环境,但这也是Java成为了工业界第一语言的一个很重要的原因2 有风格的1 有初衷的,并行编程在工业界还没有那么热,而且函数式编程(lambda一般会被认为是函数式编程中的典型特征)与面向对象编程是属于两个范式,在理念上是有冲突的(虽然目前很多语言会结合二者)Java以前是力推完全的面向对象编程方式,有考虑的楼上有人提类型擦除,有流派的另一个显得笨的地方是,语法复杂,比如即将引入的lambda表达式,这是典型的为并行编程引入的语法糖(虽然非并行编程的话用lambda也是有好处的)Java刚出来时,api正交,实际上Java的确是显得有点学院派了但是你会发现它的语法严谨也带来了很多好处,比如团队协作时,不那么灵活的语法会避免很多问题,这也是大型系统喜欢用Java搭建的一个重要原因而且这样的语法可以造就一流的IDE,几乎没有哪门语言的IDE能做到像Java的IDE那样的好用,一行Python代码抵10+行Java代码,看起来一点都不酷,和Python、Ruby一类的语言没法比,很多情况下,可以说,的确看起来很笨,否则Java 5以前的诸如List list = new ArrayList();的代码就没办法正常工作了诸如此类的向下兼容设计导致了一些问题,但这个是有考虑的,因为新的范型支持需要保证完全的向下兼容,只能使用类型擦除
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。尤其是在企业软件领域?
服务器君一共花费了212.728 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
知乎上看到的一个问题:Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的,尤其是在企业软件领域?
我只接触过一点Java,仅提供一些观察同事搞Java项目,还有一些自己思考而得到的看法(本人主要在UNIX下写C和Shell):
1. 语言是不是繁琐呢?手头有一本《Thinking in Java》中文第四版,数了一下正文共22章856页。随手翻一下,示例代码和讲解正文大概比例在1.5 : 1这样。没有真正用Java干过项目的人肯定会大为惊叹:我勒个去,这么多知识点!此为“繁”;
2. 绝大部分搞编程的人,事实上,都是在使用一门语言的某个子集。该子集的形成由项目主导者发起、开发活动参与者共同决定,且相对长期稳定。每一个即将参与该项目的人肯定会先把语言学个大概(其难度参考前一条),然后再根据项目学习该语言子集,最后固化下来。不断使用该子集固然能提升开发效率,但代价不菲,极容易就变成了项目中的一颗镙丝钉(“专家”);
3. 一门语言的设计肯定不会一蹴而就,一步步改良。没记错的话,Java诞生于1995年左右,到今天已经快满20年。在当时那种IT环境和条件下设计出来的语言,必然存在许多妥协、限制与错误,既不能随便将之抹除(可能还有很多工程依赖着),也不能随便更正,只能通过添加新语法、新类库来打补丁,导致语言更“繁”。举个例子,非内建容器类库是一个典型硬伤,再举个例子,时间日期类没见有多好用,也没见有更新过,连替代品都没见过(恕我不写Java,的确没见过);
4. 类库(框架)丰富是好事还是坏事,要看针对同一个任务能找到多少替代品。如果有三到四个,那么肯定是好事,既不会造成单点故障,也不至于造成理解和记忆上的负担。但是类库太多,选择太多,人的幸福感反而会下降,高效率也就无从谈起;
5. 框架真的可以保证快速开发吗?熟悉的话是可以的,专家编程嘛!但是
熟悉之前要花非常多时间学习使用吃闷亏。
框架只能免除掉一部分开发工作量。
框架跟业务总是存在“不合缝”的差异。
只不过将复杂度从开发转移到了部署运维。
依赖性极强。
6. IDE可以提高开发效率吗?仅仅一部分罢了。IDE本身就是个非常复杂的东西,将之调校到符合个人开发步调的进程可能会持续很久,事实上大部分人也只是用一些常用功能罢了。而且
基于图形界面意味着自动化不容易(需要编写额外插件)。
出了问题查找原因不易。
依赖性极强。
7. Java本身是面向系统(机器)的,不是面向开发人员的。这种强设计保证有助于提升目标系统的可靠性,却牺牲了开发人员的幸福感。既然设计得如此严谨规范,为什么不能自动生成Java程序,而非得找一大票北大青鸟的人来写?
1. Java已经发展太久,太多项目依赖于它,“还在运行中的系统就不要去改动”,所以如果要选的话,后继项目可能还是会用Java。积累下来的项目资源不复用将是巨大的浪费,但同时也会将原有的设计错误、补丁、复杂度一并继承下来(能大赚一票当然好,但更好的是可以持续赚若干票);
2. Java的强系统可靠性保证影响了IT经理们的技术判断和选型。有些业务第一要求是“稳”,第二要求才是“快”。如果这类业务可以分解成细小任务并行执行,没有理由不用Java,硬件方面花钱买就是了;
3. IT经理们的技术选型影响着人才市场的供应。既然如此之多的公司和项目选择Java,那么对于人力资源供应异常丰富的中国而言,想借助初级IT能力就业那实在太容易了。反过来,人才供应丰富又进一步强化巩固Java的地位,因为能替换的人力部件实在太多了,还便宜(真的,学Java除非能跟业务搭上关系,否则用个五年十年都是白搭);
4. Java语言是“业界最佳实践”,意味着出错了不能责怪选它和用它的人,而得责怪整个业界捧错了它(参考《黑客与画家》)。
1. 创业公司还是不要上Java,做快速原型这玩意确实不合适,做稳定业务则可以认真考虑;
2. Java该革新了;
3. 如果没有Sun和Oracle,Java又当如何?
Java 语言繁琐,开发效率低,是事实,否认这个事实的大都是深入接触语言种类比较少的人,或者说他们没有接触过比 Java 更简洁,开发效率更过的语言。但问题是,目前没有另外一种语言,不繁琐,开发效率不低,但又同时具有 Java 的优点。
换句话说,你选择一个语言不是因为它的缺点,而是因为它的优点。——如果对你具体的应用来说,这个优点是必须的。那么你就没有办法选择其他的不繁琐,开发效率不低的语言。只要有替代可能,那么 Java 对于我的项目而言绝对不会是首选语言。——不过在某些领域某些项目中 Java 还无可替代罢了。
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
阅读一百本计算机著作吧,少年
《编程之美》小组 (作者)
《编程之美:微软技术面试心得》是一本让人着迷的书!阅读起来。有些题目的内容会引起强烈的共鸣,尤其是那些自己非常熟悉并且又深知解答的题目;也有一些题目让我异常惊诧,原来除了我所知道的解答思路之外,还有更好的解答以及更深层次的原因。还有一些题目是从来没想到过的。阅读过程是一次愉快的享受,也是脑细胞持续活跃的过程。
扫一扫,在手机上阅读
栏目最新博文
52,233 views
21,354 views
29,959 views
44,643 views
20,346 views
12,404 views
9,095 views
6,559 views
17,018 views
13,520 views
栏目博文推荐
3,455 views
20,346 views
3,859 views
12,861 views
3,276 views
3,344 views
13,998 views
8,505 views
7,534 views
5,734 views
知识是一座宝库,实践是打开宝库的钥匙。
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(at)163.com,腾讯微博:,欢迎与我联系。

我要回帖

更多关于 被男生说蠢萌什么意思 的文章

 

随机推荐