当前位置: 首页 > news >正文

自建网站服务器备案建筑方案设计案例

自建网站服务器备案,建筑方案设计案例,网站开发说明,怎样设计公司logo01、前世今生你好呀#xff0c;我是 Guava。1995 年的时候#xff0c;我的“公明”哥哥——Java 出生了。经过 20 年的发展#xff0c;他已经成为世界上最流行的编程语言了#xff0c;请允许我有失公允的把“之一”给去了。虽然他时常遭受着各种各样的吐槽#xff0c;但他… 01、前世今生你好呀我是 Guava。1995 年的时候我的“公明”哥哥——Java 出生了。经过 20 年的发展他已经成为世界上最流行的编程语言了请允许我有失公允的把“之一”给去了。虽然他时常遭受着各种各样的吐槽但他始终没有停下前进的脚步。除了他本身的不断进化围绕着他的大大小小的兄弟们也在不断地更新迭代。我正是在这样的背景下应运而生的我简单易用对我大哥是一个非常好的补充可以说只要你有使用我哥作为开发语言的项目几乎都能看到我的身影。我由 Google 公司开源目前在 GitHub 上已经有 39.9k 的铁粉了由此可以证明我的受欢迎程度。我的身体里主要包含有这些常用的模块集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等。新版的 JDK 中已经直接把我引入了可想而知我有多优秀忍不住骄傲了。这么说吧学好如何使用我能让你在编程中变得更快乐写出更优雅的代码02、引入 Guava如果你要在 Maven 项目使用我的话需要先在 pom.xml 文件中引入我的依赖。dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion30.1-jre/version /dependency 一点要求JDK 版本需要在 8 以上。03、基本工具Doug Leajava.util.concurrent 包的作者曾说过一句话“null 真糟糕”。Tony Hoare图灵奖得主、快速排序算法的作者当然也是 null 的创建者也曾说过类似的话“null 的使用让我损失了十亿美元。”鉴于此我用 Optional 来表示可能为 null 的对象。代码示例如下所示。OptionalInteger possible  Optional.of(5); possible.isPresent(); // returns true possible.get(); // returns 5 我大哥在 JDK 8 中新增了 Optional 类显然是从我这借鉴过去的不过他的和我的有些不同。我的 Optional 是 abstract 的意味着我可以有子类对象我大哥的是 final 的意味着没有子类对象。我的 Optional 实现了 Serializable 接口可以序列化我大哥的没有。我的一些方法和我大哥的也不尽相同。使用 Optional 除了赋予 null 语义增加了可读性最大的优点在于它是一种傻瓜式的防护。Optional 迫使你积极思考引用缺失的情况因为你必须显式地从 Optional 获取引用。除了 Optional 之外我还提供了参数校验常见的 Object 方法比如说 Objects.equals、Objects.hashCodeJDK 7 引入的 Objects 类提供同样的方法当然也是从我这借鉴的灵感。更强大的比较器04、集合首先我来说一下为什么需要不可变集合。保证线程安全。在并发程序中使用不可变集合既保证线程的安全性也大大地增强了并发时的效率跟并发锁方式相比。如果一个对象不需要支持修改操作不可变的集合将会节省空间和时间的开销。可以当作一个常量来对待并且集合中的对象在以后也不会被改变。与 JDK 中提供的不可变集合相比我提供的 Immutable 才是真正的不可变我为什么这么说呢来看下面这个示例。下面的代码利用 JDK 的 Collections.unmodifiableList(list) 得到一个不可修改的集合 unmodifiableList。List list  new ArrayList(); list.add(雷军); list.add(乔布斯);List unmodifiableList  Collections.unmodifiableList(list); unmodifiableList.add(马云); 运行代码将会出现以下异常Exception in thread main java.lang.UnsupportedOperationExceptionat java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1060)at com.itwanger.guava.NullTest.main(NullTest.java:29) 很好执行 unmodifiableList.add() 的时候抛出了 UnsupportedOperationException 异常说明 Collections.unmodifiableList() 返回了一个不可变集合。但真的是这样吗你可以把 unmodifiableList.add() 换成 list.add()。List list  new ArrayList(); list.add(雷军); list.add(乔布斯);List unmodifiableList  Collections.unmodifiableList(list); list.add(马云); 再次执行的话程序并没有报错并且你会发现 unmodifiableList 中真的多了一个元素。说明什么呢Collections.unmodifiableList(…) 实现的不是真正的不可变集合当原始集合被修改后不可变集合里面的元素也是跟着发生变化。我就不会犯这种错来看下面的代码。ListString stringArrayList  Lists.newArrayList(雷军,乔布斯); ImmutableListString immutableList  ImmutableList.copyOf(stringArrayList); immutableList.add(马云); 尝试 immutableList.add() 的时候会抛出 UnsupportedOperationException。我在源码中已经把 add() 方法废弃了。  /*** Guaranteed to throw an exception and leave the collection unmodified.** throws UnsupportedOperationException always* deprecated Unsupported operation.*/CanIgnoreReturnValueDeprecatedOverridepublic final boolean add(E e) {throw new UnsupportedOperationException();} 尝试 stringArrayList.add() 修改原集合的时候 immutableList 并不会因此而发生改变。除了不可变集合以外我还提供了新的集合类型比如说Multiset可以多次添加相等的元素。当把 Multiset 看成普通的 Collection 时它表现得就像无序的 ArrayList当把 Multiset 看作 MapE, Integer 时它也提供了符合性能期望的查询操作。Multimap可以很容易地把一个键映射到多个值。BiMap一种特殊的 Map可以用 inverse() 反转BiMapK, V 的键值映射保证值是唯一的因此 values() 返回 Set 而不是普通的 Collection。05、字符串处理字符串表示字符的不可变序列创建后就不能更改。在我们日常的工作中字符串的使用非常频繁熟练的对其操作可以极大的提升我们的工作效率。我提供了连接器——Joiner可以用分隔符把字符串序列连接起来。下面的代码将会返回“雷军; 乔布斯”你可以使用 useForNull(String) 方法用某个字符串来替换 null而不像 skipNulls() 方法那样直接忽略 null。Joiner joiner  Joiner.on(; ).skipNulls(); return joiner.join(雷军, null, 乔布斯); 我还提供了拆分器—— Splitter可以按照指定的分隔符把字符串序列进行拆分。Splitter.on(,).trimResults().omitEmptyStrings().split(雷军,乔布斯,,   沉默王二); 06、缓存缓存在很多场景下都是相当有用的。你应该知道检索一个值的代价很高尤其是需要不止一次获取值的时候就应当考虑使用缓存。我提供的 Cache 和 ConcurrentMap 很相似但也不完全一样。最基本的区别是 ConcurrentMap 会一直保存所有添加的元素直到显式地移除。相对地我提供的 Cache 为了限制内存占用通常都设定为自动回收元素。如果你愿意消耗一些内存空间来提升速度你能预料到某些键会被查询一次以上缓存中存放的数据总量不会超出内存容量就可以使用 Cache。来个示例你感受下吧。Test public void testCache() throws ExecutionException, InterruptedException {CacheLoader cacheLoader  new CacheLoaderString, Animal() {// 如果找不到元素会调用这里Overridepublic Animal load(String s) {return null;}};LoadingCacheString, Animal loadingCache  CacheBuilder.newBuilder().maximumSize(1000) // 容量.expireAfterWrite(3, TimeUnit.SECONDS) // 过期时间.removalListener(new MyRemovalListener()) // 失效监听器.build(cacheLoader); //loadingCache.put(狗, new Animal(旺财, 1));loadingCache.put(猫, new Animal(汤姆, 3));loadingCache.put(狼, new Animal(灰太狼, 4));loadingCache.invalidate(猫); // 手动失效Animal animal  loadingCache.get(狼);System.out.println(animal);Thread.sleep(4 * 1000);// 狼已经自动过去获取为 null 值报错System.out.println(loadingCache.get(狼)); }/*** 缓存移除监听器*/ class MyRemovalListener implements RemovalListenerString, Animal {Overridepublic void onRemoval(RemovalNotificationString, Animal notification) {String reason  String.format(key%s,value%s,reason%s, notification.getKey(), notification.getValue(), notification.getCause());System.out.println(reason);} }class Animal {private String name;private Integer age;public Animal(String name, Integer age) {this.name  name;this.age  age;} } CacheLoader 中重写了 load 方法这个方法会在查询缓存没有命中时被调用我这里直接返回了 null其实这样会在没有命中时抛出 CacheLoader returned null for key 异常信息。MyRemovalListener 作为缓存元素失效时的监听类在有元素缓存失效时会自动调用 onRemoval 方法这里需要注意的是这个方法是同步方法如果这里耗时较长会阻塞直到处理完成。LoadingCache 就是缓存的主要操作对象了常用的就是其中的 put 和 get 方法了。07、尾声上面介绍了我认为最常用的功能作为 Google 公司开源的 Java 开发核心库个人觉得实用性还是很高的不然呢嘿嘿嘿。引入到你的项目后不仅能快速的实现一些开发中常用的功能而且还可以让代码更加的优雅简洁。 往期推荐 Google 开源的依赖注入库比 Spring 更小更快我去这几个Linux指令太装B了|动图展示Spring 事务失效的 8 大场景面试官直呼666...
http://www.zqtcl.cn/news/856202/

相关文章:

  • 厦门过路费网站福建省建设执业资格注册中心网站
  • c 网站开发案例详解手机网站返回顶部代码
  • 济南微网站建设图书馆评估定级关于网站建设标准
  • flash型网站宝塔面板做网站绑定域名
  • 建设网站的策划书门户网站 流量
  • 佛山高端网站建设便宜自适应网站建设
  • 网络营销创意案例桂林seo公司推荐23火星
  • 网站开发知识产权归属问题wordpress会计模板下载
  • 昆明网站的优化自媒体是干什么的
  • 大成建设株式会社网站删掉wordpress主题
  • 个人网站备案类型网络维护培训班
  • 做网站的可以注册个工作室吗一个网站两个域名吗
  • 网站建设要准备什么资料网站建设 锐颖科技
  • 如何建设网站山东济南兴田德润官网电子商城官网
  • 网站如何做支付宝接口免费ppt自动生成器
  • 泰安市建设职工培训中心网站官网seo经理招聘
  • 湛江做网站seo网站建设 0551
  • 建站公司 深圳苏州建站公司
  • 网站怎么做引流呢济南网站微信
  • 一个域名可以做几个网站吗wordpress左右翻转页面
  • 天津人工智能建站系统软件wordpress主题没有小工具
  • 网站的备案流程图视频制作素材
  • 劳务公司网站建设方案建设促销网站前的市场分析
  • 网络营销优化培训网站seo置顶 乐云践新专家
  • 小说网站搭建教程wordpress后台图片
  • 付网站开发费计入什么科目网站开发的历史
  • 站长素材ppt模板免费下载网站开发视频教程迅雷下载
  • 建设一个网站怎么赚钱南京江北新区房价走势最新消息
  • 一个网站怎么做软件下载互联网投放渠道有哪些
  • 手机网站建设进度环境设计排版素材网站