1. Verzeichnis mehrerer Cheat-Codes
1 Was sind die Fallstricke bei der Verwendung von StringBuffer?
2. Wie lang ist die längste Codezeile, die Sie jemals geschrieben haben? ? ?
3. Schleife + bedingte Beurteilung, wie viele Ebenen können Sie maximal verschachteln?
4. Um die Abfragegeschwindigkeit im späteren Stadium zu optimieren ~ habe ich viel Geschäftssinn!
5. Wie wurdest du von einer Anomalie gespielt und bist dann zu einer Anomalie geworden?
6. Stream ist der meistgespielte Code, jeder, der ihn gesehen hat, ist schockiert!
2. Was sind die Fallstricke bei der Verwendung von StringBuffer?
Haben Sie jemals die StringBuffer-Klasse von Java so verwendet?
/** * Create Time 2019/5/24 * StringBuffer追加 如痴如醉的写法 * @author cailong **/ public class Append { public static void main(String[] ares){ StringBuffer sb = new StringBuffer(); //这里都能理解 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>"); for (int i = 0; i " + "<nsrsbh>"+i+"</nsrsbh>" + "<nsrmc>"+i+"</nsrmc>" + "<djxh>"+i+"</djxh>" + "<zgswj_dm>"+i+"</zgswj_dm>" + "<zgswj_mc>"+i+"</zgswj_mc>" + "<sjly>sjzs</sjly>" + "<ywsx_dm>"+i+"</ywsx_dm>" + ""); } sb.append("</root>"); System.out.println(sb.toString()); } }
3. Wie lang ist die längste Codezeile, die Sie jemals geschrieben haben? ? ?
Was ist die längste Codezeile, die Sie jemals geschrieben haben? Warum hast du so lange geschrieben? Sieht es cool aus oder möchten Sie die Anzahl der Codezeilen reduzieren?
List<operationpurchaseinfo> purchaseInfoList = sheet.getPurchaseInfoList() .stream() .filter(purchaseInfo -> purchaseInfo.getExteriorOperation() .getExteriorPart() .getExteriorOperationList() .stream() .filter(exteriorOperation -> exteriorOperation .getProcessState() .equals(ExteriorOperation.ProcessState.PROCESSING)) .count() != 0 // 订单明细中工序对应的工件下的其他工序存在加工中, // 且已发给供应商且供应商不是当前订单供应商时,需要判断 && (purchaseInfo.getExteriorOperation() .getExteriorPart() .getTeamwork() == null || !purchaseInfo.getExteriorOperation() .getExteriorPart().getTeamwork().equals(sheet.getTeamwork())) ).collect(Collectors.toList());</operationpurchaseinfo>
Obwohl der obige Code in mehrere Zeilen aufgeteilt und angezeigt wird, handelt es sich im Wesentlichen um eine Zeile, eine äußerst komplexe Zuweisungsanweisung!
Soll dieser Code für andere unverständlich sein, um Ihre Programmierkenntnisse unter Beweis zu stellen?
Der Herausgeber ist der Meinung, dass die Java Stream API und verschiedene funktionale Programmiermethoden sowie verschiedene syntaktische Zucker dazu geführt haben, dass diese Art von schlechtem Code bis zu einem gewissen Grad immer häufiger vorkommt!
Lasst uns diesen Code also gemeinsam kritisieren, oder habt ihr gute Lösungen?
4. Cheat-Code |. Schleife + bedingte Beurteilung, wie viele Ebenen können Sie maximal verschachteln?
for-Schleifen und if-Bedingungsanweisungen sind unerlässlich. Aber wie viele Ebenen verschachtelter Schleifen und bedingter Beurteilungen haben Sie gesehen? Mit anderen Worten: Wie viele Verschachtelungsebenen vertragen Sie maximal?
Werfen wir zunächst einen Blick auf den extremen Cheat-Code:
// 这个***循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交 if (recordList.size() > start) { for (int i = start; i map = recordList.get(i); Map<string> field11 = (Map<string>) map.get("field"); //name -> code Map<string> record11 = (Map<string>) map.get("record"); // code -> value String catagory1 = map.get("categoryId").toString(); // 查询***种类型对应的其他类型 SalaryDataVo ss = JSON.parseObject(JSON.toJSONString(map), SalaryDataVo.class); Page page3 = salaryManagerService.getAllRecordsByCondition(ss); if (page3.getRecords().size() > 0) { List<map>> salaryDataVos = page3.getRecords(); salaryDataVos = this.reSetMap(salaryDataVos, null, null); for (Map<string> map2 : salaryDataVos) { Map<string> field2 = (Map<string>) map2.get("field"); Map<string> record2 = (Map<string>) map2.get("record"); String catagory2 = map2.get("categoryId").toString(); List<salarygroupvo> groupList2 = salaryGroupService.getSalaryGroupsItems(this.getUserCorpId(), catagory2); for (SalaryGroupVO cc : groupList2) { cc.setCode(cc.getParentId() + cc.getCode()); } //计算 for (Map.Entry<string> entity : field2.entrySet()) { String keyName = entity.getKey(); for (SalaryGroupVO s2 : groupList2) { if ("bigDecimal".equals(s2.getItemType()) && s2.getCode().equals(field2.get(keyName).toString()) && ("部门" != keyName) && ("姓名" != keyName) && StringUtils.isNotEmpty(s2.getItemType())) { if (field11.containsKey(keyName)) { if (field11.containsKey(keyName)) { String code1 = field11.get(keyName).toString(); Double newValue = 0.0; Double oldValue = 0.0; if (!record11.get(code1).toString().matches("^[0-9]*$")) { oldValue = Double.parseDouble(record11.get(code1).toString()); if (record2.containsKey(entity.getValue().toString()) && (!record2.get(entity.getValue().toString()).toString().matches("^[0-9]*$"))) { String value2 = record2.get(entity.getValue().toString()).toString(); newValue = Double.parseDouble(value2); } record11.remove(field11.get(keyName).toString()); } if (code1.startsWith(catagory1) || code1.startsWith(catagory2)) { String co = code1.replace(catagory1, "hz"); field11.put(keyName, co); record11.put(co, oldValue + newValue); } } } else { String code = entity.getValue().toString(); String str = entity.getValue().toString(); Object value2 = record2.get(entity.getValue().toString()); if (str.startsWith(catagory1) && str.replace(catagory1, "").startsWith("hz")) { code = str.replace(catagory1, ""); } else if (str.startsWith(catagory2) && str.replace(catagory2, "").startsWith("hz")) { code = str.replace(catagory2, ""); } field11.put(keyName, code); record11.put(code, value2); } } } } } } List<salarygroupvo> sList = salaryGroupService.getSalaryGroupItemsByParentId(catagory1); for (SalaryGroupVO s : sList) { if (field11.containsKey(s.getName()) && s.getCode().startsWith("hz")) { String k = field11.get(s.getName()).toString(); field11.put(s.getName(), s.getCode()); String value = null; if (record11.containsKey(k)) { value = record11.get(k).toString(); } record11.put(s.getCode(), value); } } resultList.add(map); pageInfo.setRecords(resultList); } }</salarygroupvo></string></salarygroupvo></string></string></string></string></string></map></string></string></string></string>
5. Der Cheat-Code | Um die Abfragegeschwindigkeit im späteren Stadium zu optimieren ~ ziemlich geschäftstüchtig!
Was für ein Programmierer ist ein guter Programmierer? Wenn wir Systeme für Kunden entwickeln, behalten wir uns einige versteckte Punkte für spätere Optimierungen vor.
Durch die Optimierung dieser verborgenen Punkte können Kunden sofort spüren, dass das System einen qualitativen Sprung in der Betriebsgeschwindigkeit gemacht hat, was es dem Unternehmen ermöglicht, den Entwicklungsvertrag für die zweite Phase erfolgreich zu unterzeichnen und enorme Entwicklungsgebühren zu kassieren.
Aus Sicht des Unternehmens ist ein solcher Programmierer ein guter Programmierer.
Zum Beispiel:
6. Cheat-Code |. Wie bist du von Anomalien angesteckt worden und dann zu Anomalien geworden?
Menschen, die Java spielen, werden zu Beginn von verschiedenen Ausnahmen missbraucht, und Nullzeiger sollten die häufigste sein. Nachdem ich zwei weitere Jahre gespielt hatte, fing ich an, ungewöhnlich zu spielen, und in einem endlosen Strom tauchten alle möglichen seltsamen und ungewöhnlichen Spielweisen auf.
Halten Sie die folgende Definition von Anomalie für angemessen?
/** * 处理业务的异常 * 居然有一堆静态异常,准备好了随时可以抛?? * 错误码是字符串 */ public class CommandException extends BaseException { private static final long serialVersionUID = -6354513454371927970L; public static CommandException PARAM_NULL= new CommandException("Command_assemble_01", "Parameter is Needed But Empty"); public static CommandException DEVID_NULL = new CommandException("Command_assemble_02", "DevId Cannot Be Null"); public static CommandException MDCODE_NULL = new CommandException("Command_assemble_03", "Model Code Cannot Be Empty"); public static CommandException ORDER_NULL = new CommandException("Command_assemble_04", "Order Cannot Be Empty"); public static CommandException TYPE_NULL = new CommandException("Command_assemble_05", "Upstream / Downstream Type Cannot Be Empty"); public static CommandException MENUID_NULL = new CommandException("Command_assemble_06", "Menu Id Cannot Be Null"); public static CommandException CTRLTYPE_NOT_RANGE= new CommandException("Command_assemble_07", "Ctrltype Cannot Be Recognized, Which is not in Range"); public static CommandException CMD_NULL = new CommandException("Command_analyze_01", "CMD Cannot Be Null"); public static CommandException PAYLOAD_NULL = new CommandException("Command_analyze_02", "Payload Cannot Be Null"); public static CommandException FRAMEWORK_FAILED= new CommandException("Command_analyze_03", "Framework Failed to be Checked"); public static CommandException CHECK_FAILED= new CommandException("Command_analyze_04", "Command Failed to be Checked"); public static CommandException CONFIGURE_NOT_EXIST = new CommandException("Command_error_1001", "Configure is not Exist"); public static CommandException REDIS_ERROR = new CommandException("Command_error_1002", "Cache Command in Redis Error", true); //省略构造函数、get/set方法 }
Wenn es nicht in Ordnung ist, was ist dann das Problem?
7. Der 6. meistgespielte Code von Stream, jeder, der ihn sah, war schockiert!
Stream ist ein Highlight von Java 8. Es ist ein völlig anderes Konzept als InputStream und OutputStream im java.io-Paket. Stream in Java 8 ist eine Erweiterung der Funktionalität von Sammlungsobjekten. Es konzentriert sich auf die Durchführung verschiedener sehr praktischer und effizienter Aggregationsoperationen (Aggregatoperationen) oder Massendatenoperationen (Massendatenoperationen) für Sammlungsobjekte. Die Stream-API verbessert mithilfe des neu entstandenen Lambda-Ausdrucks die Programmiereffizienz und Programmlesbarkeit erheblich.
Stream-Nutzung:
//Stream 用的66的 final EventAction eventAction = redisObj( EventActionKey + distributionEventId, () -> Optional .of(distributionEventId) .map(eventId -> { final EventActionExample example = new EventActionExample(); example.createCriteria() .andEventIdEqualTo(eventId) .andTriggerTypeEqualTo(EnumEventTriggerType.DISTRIBUTION_PURCHASE.getCode().byteValue()); return example; }) .map(eventActionMapper::selectByExample) .filter(StringUtil::isNotEmpty) .map(e -> e.get(0)).orElseThrow(() -> ExceptionUtil.createParamException("事件触发信息不存在")) , EventAction.class); final AwardConfig awardConfig = redisObj(EventConfigKey + eventAction.getId(), () -> Optional.ofNullable(eventAction.getId()) .map(actionId -> { final AwardConfigExample example = new AwardConfigExample(); example.createCriteria() .andActionIdEqualTo(actionId); return example; }) .map(awardConfigMapper::selectByExample) .filter(StringUtil::isNotEmpty) .map(e -> e.get(0)).orElseThrow(() -> ExceptionUtil.createParamException("xxx")), AwardConfig.class ); Optional.of(req) .map(e -> e.clueUid) .map(id -> { final ClueExample example = new ClueExample(); example.createCriteria() .andClueUidEqualTo(id) .andDeletedEqualTo(false) .andReceivedEqualTo(false) .andCreateTimeGreaterThan(now - cluetime); example.setOrderByClause("create_time asc"); return example; }) // 获取该被邀请人所有未过期且未被领取的线索的线索 .map(clueMapper::selectByExample) .filter(StringUtil::isNotEmpty) .ifPresent(clues -> { final ClueResp clueResp = Optional.of(req) .filter(c -> { c.count = clues.size(); return true; }) .map(this::awardValue) .orElseThrow(() -> ExceptionUtil.createParamException("参数错误")); final Integer specialId = req.getIsHead() ? clues.get(0).getId() : clues.get(clues.size() - 1).getId(); clues.stream() .peek(clue -> { final AwardConfig awardConfigclone = Optional.of(awardConfig) .map(JSONUtil::obj2Json) .map(json -> JSONUtil.json2Obj(json, AwardConfig.class)) .orElseGet(AwardConfig::new); awardConfigclone.setMoney( Optional.of(clue.getId()) .filter(specialId::equals) .map(e -> clueResp.specialReward.longValue()) .orElse(clueResp.otherAverageReward.longValue()) ); eventActionService.assembleAward( awardConfigclone, clue.getAdviserUid(), clue.getAdviserUid(), clue.getClueUid(), eventAction, new PasMessageParam(), clue.getId(), AwardRelationType.Clud.code() ); }) .forEach(clue -> { clue.setOrderNo(req.orderNo); clue.setCommodityName(req.commodityName); clue.setOrderAmount(req.orderAmount); clue.setReceived(true); clue.setModifyTime(now); clueMapper.updateByPrimaryKeySelective(clue); }); } );
Das obige ist der detaillierte Inhalt vonAnalyse von Java-Codebeispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!