精华内容
下载资源
问答
  • 应该真正使用Rational Rose做东西

    千次阅读 2007-01-31 21:41:00
    以前项目,总是把代码写完再补文档,甚至包括UML类图、时序图等等。最近由于要将原北向接口框架从C++移植到JAVA,现在正在通讯模块的移植,看懂原通讯模块后,正要写一些类图和交互图。突然想应该好好利用一下...

    以前做项目,总是把代码写完再补文档,甚至包括UML类图、时序图等等。最近由于要将原北向接口框架从C++移植到JAVA,现在正在做通讯模块的移植,看懂原通讯模块后,正要写一些类图和交互图。突然想应该好好利用一下Rational Rose了,于是研究了一下,(以前只是简单的在Logic View之类里画几张图),发现可以从源码上Reverse出类图来,看起来非常清晰,发现前几天看得挺累的代码,这样做成类图后所有的关系一目了然(原先有的文件居然有1700行,code count统计出来的)。

    得出两个结论:用Rational Rose读代码,实在是个不错的选择;用Rational Rose做设计,做得详细后直接生成代码,非常有优势。准备好好学学Rational Rose的用法。其实印度人这方面就做得很好,他们的DS就是一个Rose工程,所有的东西都在上面。

    昨天我们公共技术系统组刚成立,今天就跟系统组一起去吃年饭。发现系统组喝酒跟原来在项目组喝酒不是一码事,首先他们只喝白酒(少量红酒),其次量都不小。还好我没敢嚣张,呵呵。

    展开全文
  • React是什么东西,用来什么??能够什么??等效于最常见的什么??
  • 如何向别人介绍你东西

    千次阅读 2012-09-12 23:26:39
    对方越不了解你的行业,你的介绍就要越泛化,并且要用和对方身边熟知的东西做类比。工作后第一次回老家,亲戚朋友问我在外面打工什么。我简单的回答是数据的保险柜。如果时间允许的话,我就会举个例

    码农不可避免地需要经常向别人介绍自己做的产品和项目。简单地把项目向别人介绍清楚是门学问。最近,给队伍里面的新同事做入职培训,结合之前的一些认识,简单谈谈我的体会。

    1. 向根本不懂你这个行业的人介绍你的产品

    对方越不了解你的行业,你的介绍就要越泛化,并且要用和对方身边熟知的东西做类比。工作后第一次回老家,亲戚朋友问我在外面打工做什么。我简单的回答是做数据的保险柜。如果时间允许的话,我就会举个例子:假如你有块金条,你不会每天放在钱包里面带着到处跑,因为你知道如果不小心钱包掉了损失就大了。你也许会考虑会放在家里某个箱子里面并把它锁起来,或者是买个保险柜把它装起来,这就更放心了。同样的,如果你手机或电脑不小心被搞坏了,或者丢了,里面存的歌曲和照片也就没了。我们做的产品就是一个保险箱,只要你买一个回家,把你的照片放到里面去,就不用担心它会掉(理论上是这样的)。当然,最后还要加一句,我们的产品不是面向个人,主要是卖给那些不差钱的单位,比如,银行,电信等单位。

    2. 向你的客户介绍你的产品

    这里的客户不一定是真正付钱买你东西的人,凡是会使用你做的东西的人都是你的客户。用户最关心的你的产品能给他带来什么。不要一上来就把你产品的功能给列出来,因为用户也不知道你所说的这些功能对他有什么用,用户需要的是你帮助他解决问题。面对你的客户,你的介绍可以从你的产品解决的问题(也就是用户可能遇到的问题)出发,因为这是用户最关心的,然后介绍你的产品的功能是如何解决这个问题的。

    我家旁边有个杂货店,卖些五金用品,有一次,我修洗脸池下面的水管,需要买一跟弯的管子,这样里面就会存一些水在里面防止下水道的臭气回流。我就跑到他们家去问有没有这样的管子,他们给了我一根,然后我看到了一下,发现尺寸不对。然后,他们就问我要买来做什么,然后我就给他们描述了一下我家洗脸池下面的结构,为什么要买特定尺寸的管子。结果,他们就给了我推荐一套方案,由一个三通阀加上一些管子组成,让我在他家买了罐胶水把三通阀和管子粘合在一起,最终我按照他们推荐的方案,回家把那个管子给DIY出来了,最终花费也比买一根管子的钱要少。我觉得他们家经营思路非常先进,类似宜家的思路。在宜家里面,它通过一些现成的解决方案告诉你某个东西可以这样用,可以和另外一个东西组合起来解决你的一个实际问题。如果宜家像一个普通的五金店一样只是把他的东西零散地放在那里,生意绝对要差很多。

    一个题外话,当你被要求在你的产品中加入某些功能的时候,一定要问他为什么,他想解决什么问题,你的产品中现在的功能能否解决他遇到的问题,或者你有没有更好的方案去帮助他解决问题,而不是让加什么功能就加什么功能。

    3. 向新同事介绍你的产品

    因为新同事将会工作在这个产品上,所以一方面你首先要把他当成是客户向他介绍产品,让他知道为什么我们要做这个产品(也许新同事能给你一些新的idea,有更好的方法去解决你产品解决的问题);另一方面,你需要向他介绍你产品是怎么构建出来的。需要避免一开始就讲很多细节的东西。这时,可以采用的方法是先介绍基本原理,也就是最核心的东西,让新同事了解产品的概况,然后逐渐把产品要解决的问题和产品的实现给关联起来,让新同事知道产品这样实现是有原因的。让人知道你为什么要这样做比让别人知道你是怎么做的更重要。

    每个产品最最核心的东西是产品的骨架。一般核心的东西其实是很简单的,复杂的东西多是不可缺少的附属工程。比如,一个房子,当把家里的装饰和家具全拿走了,里面其实很简单的,核心的就是几根柱子,然后几堵墙隔出几个房间。对应到软件里面,核心的逻辑可能也就不到1%的代码,剩下的要不是实现用户接口,比如实现GUI;要不是错误处理;要不是trace log帮助诊断问题的代码等。

    4. 灵丹妙药

    当你向别人介绍任何东西的时候,强迫自己用一句话把它给概括清楚。这方面,可以学习乔布斯,在每次发布新的产品的时候,他总是用一句把这个产品的核心用一句话给概括出来,比如iCloud发布时,关于iCloud的介绍是,Store contacts, calendars, photos, music, books, apps and more in the cloud and access them on all your devices. 当你向别人介绍产品的架构,功能的结构,试试用一句话来概括一个模块的功能,一个类的功能,一个函数的功能。如果能用一句话给概括出来,说明结构还不错,否则就说明你的类功能很复杂,需要重构。

    就这些了,等待没有乔布斯的iPhone5发布会。

    展开全文
  • Gradle升级4.1(插件3.0.0)变化了哪些东西,需要哪些改变。转载请注明出处: Gradle升级4.1(插件3.0.0)变化了哪些东西,需要哪些改变。 地址:http://www.jianshu.com/p/d372cc6802e5目录前言gradle升级4.1...

    Gradle升级4.1(插件3.0.0)变化了哪些东西,需要做哪些改变。

    转载请注明出处:
    Gradle升级4.1(插件3.0.0)变化了哪些东西,需要做哪些改变。
    地址:http://www.jianshu.com/p/d372cc6802e5

    目录

    前言

    gradle升级4.1(插件3.0.0,as 3.0.0)改了不少的东西,尤其是依赖的变化。所以我们还是需要了解一下,对以后添加依赖库/改动build.gradle都是有帮助的。

    提前准备

    升级到gradle插件(gradle-tools)3.0.0:

    • 需要gradle版本升级到4.1以上。
    • android studio版本升级到3.0.0以上。
    • 升级Android SDK Build Tools 版本26.0.0以上

    依赖使用api和implementation,废弃compile

    区别示意图

    提示一下:gradle tools升级到3.0.0以上,compile关键字 已经明确写明废弃了(api关键字的作用等同于之前的compile),但是google官方文档上说“还会保留一段时间,直到下个比较大的gradle tools版本发布”。所以现在仍然使用compile,不会报错。

    gradle插件升级到3.0.0以上最大的区别是依赖方式的改变:

    implementation的“访问隔离”只作用在编译期

    implementation的“访问隔离”只作用在编译期。什么意思呢?如果lib C 依赖了lib A 2.0版本,lib B implementation依赖了lib A 1.0版本:

    • 那么编译期,libC 可访问2.0版本的libA ,libB可访问1.0版本的libA。但最终打到apk中的是2.0版本(通过依赖树可看到)。
    • 在运行期,lib B 和lib C都可访问lib A的2.0版本(因为apk的所有dex都会放到classLoader的dexPathList中)。

    使用implementation有什么好处

    • 如果项目中有很多级联的工程依赖,比如上图中lib A B C的依赖是工程依赖。如果使用的依赖方式是compile/api,那么当lib A接口修改后重新编译时,会重新编译libA B C(即使lib C中并没有用到修改的libA的接口)。如果使用implementation依赖,因为“编译期隔离”的原因,不相关的lib就不会进行重新编译。
    • 如果项目中都是aar依赖,编译减少时长这个优点就没有了(因为aar已经是编译好的字节码了)。那么还有什么用呢?还是以上图为例。之前我们都是compile依赖,如果lib A已经依赖了lib B,那么在libC的build.gradle中就不用写lib A的依赖了。但这样会有问题:
      • 我从lib C的build.gradle的依赖列表中不能完整的知道libC都需要依赖哪些lib。
      • 假设这么一种情况,我知道项目中的依赖的libA的最高版本是2.0,那么app运行时就是使用的这个2.0版本的libA。这时候我需要打一个libC的aar。lib C如果通过compile传递依赖了libA,因此从lib C的build.gradle中不知道lib C 编译时依赖的是哪个版本的lib A。如果libC 打aar(编译)时,依赖的仍然libA 1.0,可能这个aar就有问题了。

    所以使用implementation是一种比较规范的依赖做法。虽然可能需要多写一写依赖,但是项目的可读性是有很大好处的(虽然多写一些依赖,apk打包运行时仍然是采用最高版本的lib,所以对运行不影响)。

    依赖的变种感知(variant-aware dependency)

    什么意思呢?一个项目中需要构建的是某个变种(buildType+flavors 如SpeedDebug),那么当构建依赖的lib时,会自动寻找对应的变种(SpeedDebug)进行构建。所以这就有个问题,有可能你依赖的lib里面并没有对应的变种,怎么办吧?新版本的gradle中提供了一些api来解决这种事情,比如:

          android {
    buildTypes {
        debug {}
        release {}
        staging {
            // Specifies a sorted list of fallback build types that the
            // plugin should try to use when a dependency does not include a
            // "staging" build type. You may specify as many fallbacks as you
            // like, and the plugin selects the first build type that's
            // available in the dependency.
            matchingFallbacks = ['debug', 'qa', 'release']
        }
    }
    }
    

    具体可以看官方指南。不过因为我们的依赖一般都是aar依赖,并且lib中也一般不会写一些特别的buildType或flavor,所以这个对我们没啥影响。
    这里需要注意一个规范:
    对于渠道类型(flavor),必须添加 flavor dimension,就算你所有的渠道只有一种维度。(好在亮总已经添加过了,所以没我什么事了~~),使用方式就是在productFlavors块前面添加flavorDimensions:

     // Specifies two flavor dimensions.
     flavorDimensions "tier", "minApi"
    
     productFlavors {
     free {
      // Assigns this product flavor to the "tier" flavor dimension. Specifying
      // this property is optional if you are using only one dimension.
      dimension "tier"
      ...
    }
    
    paid {
      dimension "tier"
      ...
    }
    
    minApi23 {
        dimension "minApi"
        ...
    }
    
    minApi18 {
        dimension "minApi"
        ...
    }
    }
    

    因为build时有了变种感知功能,所以我们在工程依赖的时候就不需要写类似(写了会报错):

      debugImplementation project(path: ':library', configuration: 'debug')
    

    这种的依赖方式的了。当我们build一个debug变种时,对于工程依赖直接写如下所示就可以了:

       implementation project(':library')
    

    对于aar依赖,我们仍然可以使用指定变种类型的依赖,如:

       debugImplementation 'com.example.android:app-magic:12.3'
    

    围绕变种感知功能,还牵扯一些其他的一些改变,需要的可以看用户指南

    一些坑

    • 找不到apkVariantData:

      Could not get unknown property 'apkVariantData' for object of type com.android.build.gradle.internal.api.ApplicationVariantImpl.   
      

      什么原因呢?gradle插件3.0.0版本 升级了gradle的api,导致有些api不能用。恰好AndResGuard 1.2.3版本插件用到了这个过期的api。所以升级没办法了。那AndResGuard有没有新的版本呢?

      抱歉,暂时还没有。所以先注释掉。到时候再改吧~

    • 需要显示声明annotation Processor库

       Error:Execution failed for task ':aimovie:javaPreCompileDebug'.Annotation processors must be explicitly declared now.  The following dependencies on the compile classpath are found to contain annotation processor.  Please add them to the annotationProcessor configuration.- roboblender-3.0.1.jar (org.roboguice:roboblender:3.0.1)Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior.  Note that this option is deprecated and will be removed in the future.See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.
      

      什么原因导致的这个错误呢?在gradle插件3.0.0之前的版本中,如果你写了compile a ,那么不但会把lib a 放到compile classpath 路径下,还会自动放到processor classpath路径下。这会导致processor classpath路径下有大量不必要的依赖,这会更加编译时间。所以从gradle插件3.0.0以后,如果一个库是annotation processors库(如果库中还有META-INF/services/javax.annotation.processing.Processor,那么就认为这是一个annotation processors库),那么需要自己手动使用annotationProcessor关键字添加:

       dependencies {
            ...
       annotationProcessor 'com.google.dagger:dagger-compiler:<version-number>'
       }
      

      并且,如果发现annotation processors库也存在于compile classpath路径下,那么就会报错。所以这么说的话,我们就不能使用compile/api/implementation来依赖一个annotation processors库了,只能使用annotationProcessor关键字来依赖annotation processors库。但如果annotation processors库也需要放到compile classpath 路径下,怎么办呢?那么需要使用compile/api/implementation再声明依赖一次。注意新版本中,compile/api/implementation这些关键字只会把这个库放到compile classpath路径下,不再放到processor classpath路径下。所以,如果一个annotation processors库要放到processor classpath和compile classpath两个路径下,那么需要用两个关键字声明两次。那么前面说了,如果发现annotation processors库在processor classpath路径会报错,所以需要在android defaultConfig块中进行声明不进行错误检查。

        android {
           ...
          defaultConfig {
          ...
            javaCompileOptions {
               annotationProcessorOptions {
                 includeCompileClasspath false
             }
           }
        }
       }
      

      当然,如果不想那么麻烦,直接使用如下配置也可以,但是这样的配置在之后的gradle插件版本中并不支持,所以不推荐。

       android {
           ...
          defaultConfig {
          ...
            javaCompileOptions {
               annotationProcessorOptions {
                 includeCompileClasspath true
             }
           }
        }
       }
      
    展开全文
  • 面对一个很不严厉的研究生导师,怎么才能学到东西?修改 在知乎上差不多一直潜水,认真回答过几次问题,这是第一次问。马上研究生就要开学了,本人要读本校的研究生,本科成绩一般,没获得保送的机会。 ------先...

    展开全文
  • 程序需要了解太多的东西,怎么办?

    千次阅读 热门讨论 2006-06-04 06:39:00
    今天一位朋友与我探讨:程序需要了解太多的东西,怎么办?我也无良方,仅能回复:程序员确实很辛苦。当年李开复博士演讲时就说:要终生学习!技术要“求甚解”,并且要一直保持一种浓烈的兴趣,这才是...
  • SDK应该包括什么东西

    万次阅读 2014-08-28 22:58:29
    作者:朱金灿来源:...但是单纯具有这些东西也是被不够的。我认为还需要至少三样东西:帮助文档,开发示例工程和实用工具。 帮助文档就是SDK的使用文档,具体应该两种:接口说明手册和二次开发指南。举个具体的
  • 阅读难度分级4,阅读时间约需15分钟(本公众号将阅读难度由易到难 自定义为1-5级)混沌大学里有一门王东岳老师的《东西方文化溯源与东西方哲学》,共...
  • JavaEE 从入门到放弃(一):Java EE 是个什么东西

    万次阅读 多人点赞 2018-07-09 19:34:09
    JavaEE 从入门到放弃(四):MVC 模式 JavaEE 从入门到放弃(五):如何理解 Spring JavaEE 从入门到放弃(六):框架的选择 (持续更新中) 另外我用 Vue + Spring Boot 了一个前后端分离的小项目,并了一下...
  • 从麦当劳,kfc,到星巴克,从computer、internet到windows,美国人一直在重复一件事,创造东西,宣传东西,到处卖东西。这些发明有的是实物有的是理念,他们都有一个共同点,就是对人们的生活产生了深远的影响。 例如...
  • 感觉自己不会的东西太多了,不知道如何下手?

    万次阅读 多人点赞 2019-10-14 09:59:36
    GitHub 8.8k Star 的Java工程师成神之路 ,不来了解...如果让我统计下,粉丝问我多的问题是什么,这个问题肯定可以排前5,问出这个问题的朋友们遍布各个年龄段。 实话说,这个问题同样也困扰过我,大概就是我刚...
  • 参考了 一个面试官对面试问题的分析 中关于 GC 的分析,垃圾回收需要搞清楚 在什么时候,对什么东西了什么事情。 在什么时候 首先需要知道,GC又分为minor GC 和 Full Gc(也称为Major GC)。Java 堆内存...
  • CCProxy是个好东西

    万次阅读 2018-05-30 16:52:52
    我在之前的博客里提到了用Teamviewer + CCProxy内网穿透,当时只是简单提了一下,因为发现这种方式网速比较慢。今天又用到了它,虽然慢点,但是总比没的用好,哈哈哈。不得不感叹CCProxy是个好东西,小巧灵活,...
  • Linux 命令行下的好东西

    万次阅读 2019-08-31 21:59:16
    Linux 命令行下的好东西 本文转载自简书http://www.jianshu.com/p/5ca890e5bdbf 现在做网站移动应用最讲究的就是推广了,推广的好那就成功了一大半,相对的没曝光产品再好也很难下去。就这个角度而言绝大...
  • 三种东西永远不要放到数据库里

    千次阅读 2015-06-03 11:18:42
    我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含的牵连,认识不到这样对系统维护尤其是系统升级带来多大的麻烦。作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的...
  • 互联网公司最值钱的东西是什么?

    千次阅读 2019-02-25 22:24:00
    公司最值钱的东西是产品,如果要问比产品更有价值的是什么?我认为是实实在在事情的程序员们。 他们虽然工资不高,每天坐在位置上敲着代码,在很多人眼中被称为“屌丝”或“宅男”,但我认为恰恰就是这些人,他们...
  • cnn是什么东西?

    千次阅读 2019-07-04 10:56:14
    cnn,就是一层搞定一层的事情,从局部到全局....最终最上得到一个大致的东西. 如一张图片.这一层:识别是什么笔画,下一层识别是什么中文汉字.再下一层识别是什么意思.就是一个不断映射变化最后得出结论的过程. ...
  • 浅谈东西方科技差距的原因

    千次阅读 2015-08-31 04:52:44
    从欧洲文艺复兴开始以来,东西方的科技对比发生了颠倒性的变化,文艺复兴以前,东方的科学技术是要比西方先进很多的,但到现在,西方和东方的科技差距其实大家都是知道的。这个差距的造成其实更来自于一种习惯,特别...
  • 现在不是去想缺少什么的时候,该想一想凭现有的东西你能什么。 ——《老人与海》 写这篇文章,有两个两个诱因,一个是 Tinyfool的tiny4cocoa 有一篇文章,正好聊到这个话题,勾起了我的一些想法:...
  • servlet到底是什么东西

    千次阅读 多人点赞 2018-07-13 22:51:48
    本以为servlet是很复杂的东西,事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface! 所以,网络协议、http什么的,servlet根本...
  • 。。。
  • 有没有同样想法的朋友。发布下意见!
  • 地球人都知道,Java有个东西叫垃圾收集器,它让创建的对象不需要像c/cpp那样delete、free掉,你能不能谈谈,GC是在什么时候,对什么东西了什么事情?一.回答:什么时候?1.系统空闲的时候。分析:这种回答大约占...
  • 首次使用idea需要配置哪些东西

    万次阅读 多人点赞 2018-07-23 13:30:40
    首次使用idea需要配置哪些东西? 最近因为我的eclipse无法配置sts,于是将战场转移至idea,首次使用idea,所有的配置都得重新开始配,在这里记录一下配置,造福自己,造福别人(手动捂脸)。。。。 我目前所想到的...
  • 的练习 ![图片说明](https://img-ask.csdn.net/upload/201702/11/1486785156_505300.jpg) 试图在里面加东西变成了这样(缩小了前面input的比例,添加的部分没有上去) ![图片说明]...
  • 搜索技术之我不懂的东西

    千次阅读 2016-02-01 09:33:58
    前几天上着班呢,一个过去的同事给我打电话过来,接起电话,就听那边机关枪似得一顿扫射,谈话内容是这样子的。 那个谁,我这里现在有个问题...等等情况,我就想让你从技术角度来给我评估下这个东西不,是不是几条
  • php最基础的东西,面试必备

    万次阅读 2017-05-06 19:58:01
    昨天去笔试一家企业的...但是我错了,题真实如履薄冰啊。比较痛苦。下面一起看一看,你基础是不是真正地扎实,真的往往基础的东西越是最难的东西。 我总结为差不多10个关于这方面基础的知识点。有些是借鉴网上...
  • web前端需要学习哪些东西

    千次阅读 2016-08-06 20:47:07
    web前端需要学习哪些东西?学习web前端开发基础一般来说需要掌握:HTML、CSS和JavaScript语言。那么这些语言都是干嘛用的呢?一个简单介绍。 HTML是蛋糕最基础的内容物。所谓的内容,就是你想要在网页中表达的最...
  • 回答:对什么东西?   超出了作用域或引用计数为空的对象;从gc root开始搜索找不到的对象,而且经过一次标记、清理,仍然没有复活的对象。  三.回答:什么?   删除不使用的对象,回收...
  • 我运行之后删除和修改按了之后没有效果不知是哪出了问题?[img=https://img-bbs.csdn.net/upload/202009/22/1600772362_746390.png][/img][img=https://img-bbs.csdn.net/upload/202009/22/1600772370_434654.png][/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,858,703
精华内容 743,481
关键字:

做东西