optional

杂记:GCC内联汇编

此生再无相见时 提交于 2020-12-13 14:00:58
Author: retrhelo Date: 2020.12.13 转载请注明出处 注意,本文仅基于GCC编译器,不确认是否在其他编译器环境下有效。 1. 使用asm()语句在C语言中嵌入汇编代码 我们可以使用 asm() 语句或是 __asm__() 语句来嵌入汇编代码。通常来说这两者的用法是相同的。其使用方法如下所示 asm ( "assembly code" : output operands /* optional */ : input operands /* optional */ : list of clobbered registers /* optional */ ); 1.1 Assembly Code(汇编代码) 这一部分用于填入所要执行的汇编代码,通常按照C风格字符串的格式填入,在不同的语句之间要填入 \n 作为换行符。 1.2 Outputs Operands(输出操作数) 这一部分视具体情况而言是可选的。通常使用形如 "=r" (var) 的形式编写代码,以将寄存器和变量联系起来。其中, r 可以使用具体的字符来指定所使用的寄存器,其规则如下表所示 | r | Registers | | :------------: | :------------: | | a | %eax, %ax, %al | | b | %ebx, %bx, %bl | | c |

面试官:优化代码中大量的if/else,你有什么方案?

安稳与你 提交于 2020-12-12 13:46:07
一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6、7层,一个函数几百行,简!直!看!死!人! 这个无限循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交 仔细数了数,一共有 11 层的嵌套!!! 接手这种项目的同学,内心应该是绝望的。 出现这种情况的原因很多 设计不够完善 需求考虑不完全 开发人员变动 但最为致命的是“懒” 你懒,我也懒,前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。 当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。 那,有什么方案可以优雅的优化掉这些多余的if/else? 1. 提前return 这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码: if (condition) { // do something} else { return xxx;} 其实,每次看到上面这种代码,我都心里抓痒,完全可以先判断 ! condition ,干掉else。 if (! condition ) { return xxx ; } // do something 2. 策略模式 有这么一种场景,根据不同的参数走不同的逻辑,其实这种场景很常见。 最一般的实现: if (strategy.equals("fast")) { // 快速执行} else if (strategy.equals(

领域驱动设计(DDD):领域接口化设计

痞子三分冷 提交于 2020-12-10 02:21:05
领域接口化设计 把服务对象(service)和资源库对象(repository)设计成接口是最常见的。但是这对接口化的认识还远远不够,我们需要更深入地去分析接口化设计和更全面地应用接口化编程。所以我们要讨论的是全面接口化,尤其是对 领域模型 接口化的认识。 领域接口化 通常的情况下我们会把领域模型设计成 类(class) ,但是你有没有想过把领域模型设计成 接口(interface) ?比如: public interface User { // ... } public class UserImpl implements User { // ... } 这样的设计似乎没有任何价值,那么继续深入地看看。比如: 这时候看起来有点东西,因为我们为了适配不同的 数据源 ,提供了不同的实现类。 最开始要把 领域对象 设计成接口,确实是为了在不同的 ORM 框架之间实现 无缝切换 。因为 JPA 对面向对象的支持最好,而 Mybatis 因为简单在大环境下比较流行。在解决这个问题时,通常使用 层内包裹 或者叫 对象转换 的方式来解决。具体来说是在持久层使用持久化对象(PO)与领域对象(DO)的之间进行转换。例如: public class JpaUserRepository implements UserRepository { // ... @Override public

Java8 快速实现List转map 、分组、过滤等操作

别等时光非礼了梦想. 提交于 2020-12-09 18:53:32
利用java8新特性,可以用简洁高效的代码来实现一些数据处理。 定义1个Apple对象: public class Apple { private Integer id; private String name; private BigDecimal money; private Integer num; public Apple(Integer id, String name, BigDecimal money, Integer num) { this.id = id; this.name = name; this.money = money; this.num = num; } } 添加一些测试数据: List<Apple> appleList = new ArrayList<>();//存放apple对象集合 Apple apple1 = new Apple(1,"苹果1",new BigDecimal("3.25"),10); Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20); Apple apple2 = new Apple(2,"香蕉",new BigDecimal("2.89"),30); Apple apple3 = new Apple(3,"荔枝",new BigDecimal("9.99")

java8(2)--- Stream API

自闭症网瘾萝莉.ら 提交于 2020-12-07 03:32:58
1.简述 Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一 个就是 Stream API。 Stream 是处理集合的抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询,比如可以实现group by的分组操作。总之就是Stream API提供的高效简介的数据处理方式。 流(Stream)是什么?心脏的血液通过血管流变全身,在血管中的时候就可以看做流,生病了需要通过血管进行输液,也就是说在这个流中进行了操作。心脏的血液可以看做一个数据集合,转换成流通过血管进行输送,输液这个操作就相当于是我们Stream API 所做的操作,也就是对这个流进行计算处理。 集合是数据,流是计算。 需要注意的是:   1.Stream 自己不会存储元素。   2.Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。   3.Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。 Stream三步走:   1.创建流   2.操作流   3.终止操作获取结果,注意: 流进行了终止操作后,不能再次使用 2.API操作案例    2.1.创建流 // 集合创建流 Stream<Student> stream1 =

Tushare-SDK

泄露秘密 提交于 2020-12-04 10:12:39
tushare一直没有出java的sdk,好在出了http协议的api.本项目根据http的api封装而成 gitee地址 https://gitee.com/ichiva/tushare-sdk.git 项目目录 定义实体类 @Getter @Setter public class TuTable implements Serializable { private String[] fields; private String[][] items; } 定义获取数据的接口 /** * tu 数据 */ public interface TuData { /** * 获取数据 * @return */ Optional<TuTable> get(); } 定义api请求和应答 请求 @Data public class TuRequest implements Serializable { /** * 接口名 */ private String api; private String token; /** * 输入参数 */ private Map<String,String> params; /** * 输出参数 */ private String[] fields; /** * 输出参数描述 */ private String[] fieldsName; /** * 接口描述

如何让 if/else 更优雅?

两盒软妹~` 提交于 2020-12-04 02:20:53
if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到脑壳疼,例如下面这个伪代码: 是不是很奔溃?虽然他是伪代码,并且看起来也很夸张,但在现实中,当我们无数次 review 别人代码时,都会发现类似的场景,那么我们本文就来详细聊聊,有没有什么方法可以让我们避免来写这么多的 if else 呢? 我们本文提供了 9 种方法来解决掉那些“烦人”的 if else,一起来看吧。 1.使用 return 我们使用 return 去掉多余的 else,实现代码如下。 优化前代码: if (str.equals( "java" )) { // 业务代码 ! true ; } else { return ; } 优化后代码: if (str.equals( "java" )) { return ; } return false ; 这样看起来就会舒服很多,虽然相差只有一行代码,但真正的高手和普通人之间的差距就是从这一行行代码中体现出来的。 「勿以善小而不为,勿以恶小而为之」「千里之堤,溃于蚁穴」 ,说的都是同样的道理。 2.使用 Map 使用 Map 数组,把相关的判断信息,定义为元素信息可以直接避免 if else 判断,实现代码如下。 优化前代码: if (t == 1 ) { type = "name" ; } else if (t == 2

Java 8 Optional and flatMap - what is wrong?

◇◆丶佛笑我妖孽 提交于 2020-12-03 17:59:29
问题 Some piece of code: public class Player { Team team; String name; } public class Team { List<Player> players; } public class Demo { @Inject TeamDAO teamDAO; @Inject PlayerDAO playerDAO; List<String> findTeamMatesNames(String playerName) { Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName)); return player.flatMap(p -> teamDAO.findPlayers(p.team)) .map(p -> p.name) .orElse(Collections.emptyList()); } } Why am I not able to do this? In flatMap method I am getting error "Type

Java 8 Optional and flatMap - what is wrong?

安稳与你 提交于 2020-12-03 17:58:08
问题 Some piece of code: public class Player { Team team; String name; } public class Team { List<Player> players; } public class Demo { @Inject TeamDAO teamDAO; @Inject PlayerDAO playerDAO; List<String> findTeamMatesNames(String playerName) { Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName)); return player.flatMap(p -> teamDAO.findPlayers(p.team)) .map(p -> p.name) .orElse(Collections.emptyList()); } } Why am I not able to do this? In flatMap method I am getting error "Type

Java 8 Optional and flatMap - what is wrong?

烈酒焚心 提交于 2020-12-03 17:57:57
问题 Some piece of code: public class Player { Team team; String name; } public class Team { List<Player> players; } public class Demo { @Inject TeamDAO teamDAO; @Inject PlayerDAO playerDAO; List<String> findTeamMatesNames(String playerName) { Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName)); return player.flatMap(p -> teamDAO.findPlayers(p.team)) .map(p -> p.name) .orElse(Collections.emptyList()); } } Why am I not able to do this? In flatMap method I am getting error "Type