Maison > Java > javaDidacticiel > le corps du texte

Analyse d'un exemple de code Java

PHPz
Libérer: 2023-05-10 11:58:06
avant
1732 Les gens l'ont consulté

1. Répertoire de plusieurs codes de triche

1. Quels sont les pièges d'utiliser StringBuffer de cette manière ?

2. Quelle est la longueur de la plus longue ligne de code que vous ayez jamais écrite ? ? ?

3. Boucle + jugement conditionnel, combien de niveaux pouvez-vous imbriquer au maximum ?

4. Afin d'optimiser la vitesse des requêtes à un stade ultérieur ~ J'ai beaucoup de sens des affaires !

5. Comment avez-vous été joué par une anomalie et êtes-vous ensuite devenu une anomalie ?

6. Stream est le code le plus joué, tous ceux qui l'ont vu sont choqués !

2. Code de triche | Quels sont les pièges liés à l'utilisation de StringBuffer de cette manière ?

Avez-vous déjà utilisé la classe StringBuffer de Java de cette manière ?

/**   * 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());      }  }
Copier après la connexion

3. Code de triche | Quelle est la longueur de la plus longue ligne de code que vous ayez jamais écrite ? ? ?

Analyse dun exemple de code Java

Quelle est la plus longue ligne de code que vous ayez jamais écrite ? Pourquoi as-tu écrit si longtemps ? Est-ce que ça a l'air cool ou voulez-vous réduire le nombre de lignes de code ?

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>
Copier après la connexion

Bien que le code ci-dessus soit divisé en plusieurs lignes et affiché, il s'agit essentiellement d'une seule ligne, une instruction d'affectation extrêmement complexe !

Ce code est-il censé être incompréhensible pour les autres pour montrer vos compétences en codage ?

L'éditeur estime que l'API Java Stream et diverses méthodes de programmation fonctionnelle, ainsi que divers sucres syntaxiques, ont rendu ce genre de mauvais code de plus en plus courant dans une certaine mesure !

Alors critiquons ce code ensemble, ou avez-vous de bonnes solutions ?

4. Code de triche | Boucle + jugement conditionnel, combien de niveaux pouvez-vous imbriquer au maximum ?

for les boucles et if les instructions conditionnelles sont essentielles. Mais combien de niveaux de boucles imbriquées et de jugements conditionnels avez-vous vu ? En d’autres termes, combien de niveaux d’imbrication pouvez-vous tolérer au maximum ?

Analyse dun exemple de code Java

Jetons d'abord un coup d'œil au code de triche extrême :

// 这个***循环嵌套,只是总循环的一部分。。。我已经绕晕在黄桷湾立交          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>
Copier après la connexion

5. Le code de triche | Afin d'optimiser la vitesse des requêtes à un stade ultérieur ~ un vrai sens des affaires !

Quel genre de programmeur est un bon programmeur ? Lorsque nous développons des systèmes pour des clients, nous réservons certains points cachés pour une optimisation ultérieure.

En optimisant ces points enterrés, les clients peuvent instantanément sentir que le système a fait un saut qualitatif en termes de vitesse de fonctionnement, permettant à l'entreprise de signer avec succès le contrat de développement de la deuxième phase et de percevoir d'énormes frais de développement.

Du point de vue de l'entreprise, un tel programmeur est un bon programmeur.

Par exemple :

Analyse dun exemple de code Java

6. Code de triche | Comment avez-vous été joué par des anomalies et êtes-vous ensuite devenu des anomalies ?

Les personnes qui jouent à Java seront victimes de diverses exceptions au début, et les pointeurs nuls devraient être les plus courants. Après avoir joué pendant encore deux ans, j'ai commencé à jouer anormalement, et toutes sortes de gameplay étranges et anormaux sont apparus dans un flux sans fin.

Pensez-vous que la définition suivante d’une anomalie est appropriée ?

/**   * 处理业务的异常   * 居然有一堆静态异常,准备好了随时可以抛??   * 错误码是字符串   */  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方法  }
Copier après la connexion

Si ça ne va pas, quel est le problème ?

7. Code de triche | Stream est le 6 code le plus joué, tous ceux qui l'ont vu sont choqués !

Stream est un point fort de Java 8. C'est un concept complètement différent de InputStream et OutputStream dans le package java.io. Stream dans Java 8 est une amélioration de la fonctionnalité des objets de collection. Il se concentre sur l'exécution de diverses opérations d'agrégation (opérations d'agrégation) ou d'opérations de données en masse (opérations de données en masse) très pratiques et efficaces sur les objets de collection. L'API Stream améliore considérablement l'efficacité de la programmation et la lisibilité du programme à l'aide de la nouvelle expression Lambda.

Analyse dun exemple de code Java

Utilisation du flux :

//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);                                      });                          }                  );
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal