2025年Java最新Java开发之上班摸鱼!写最少的代码!,2024字节跳动Java面试真题解析

Java最新Java开发之上班摸鱼!写最少的代码!,2024字节跳动Java面试真题解析最后 学习视频 大厂面试真题 本文已被 CODING 开源项目 一线大厂 Java 面试题解析 核心总结学习笔记 最新讲解视频 实战项目源码 收录 需要这份系统化的资料的朋友 可以点击这里获取 安全 既然如此 我们可以采用泛型来满足复用

大家好,我是讯享网,很高兴认识大家。

最后

学习视频:


讯享网

大厂面试真题:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 安全

既然如此,我们可以采用泛型来满足复用、语义清晰的要求,用中间类来满足代码安全性的要求,代码如下:

public class MultipleTwoReturn<A, B> {

/ 第一个返回值 /

private final A first;

/ 第二个返回值 /

private final B second;

public MultipleTwoReturn(A first, B second) {

this.first = first;

this.second = second;

}

// 省略Get方法

}

同时,我们可以依赖于继承,让该工具类拓展更多的参数:

public class MultipleThreeReturn<A, B, C> extends MultipleTwoReturn<A, B> {

/ 第三个返回值 /

private final C third;

public MultipleThreeReturn(A first, B second, C third) {

super(first, second);

this.third = third;

}

}

测试类:

public class MultipleApp {

public static void main(String[] args) {

MultipleTwoReturn<Integer, String> returnTest = MultipleApp.getReturnTest();

System.out.println(returnTest.getFirst());

System.out.println(returnTest.getSecond());

}

private static MultipleTwoReturn<Integer, String> getReturnTest() {

MultipleTwoReturn<Integer, String> demo = new MultipleTwoReturn<>(0, “Kerwin Demo.”);

return demo;//加入Java开发交流君样:一起吹水聊天

}

}

本质还是普通对象,但是加上泛型后威力剧增!由于在方法定义时就强制了泛型约束,语义非常清晰,同时可以完全杜绝上述的无语义中间类,当然一些必要的,有业务含义的组装类,不建议使用这种方式。

泛型:我想new一个对象

想利用作为泛型约束,却需要new一个T,但是Java它new不出来啊 😂

之前写过一个通用的Java爬虫接口,里面有一个功能就是传入目标网页的即可获取到针对不同网页设计的Bean,大概如下所示:

public interface SpiderBeansHandle {

/ 获取Url /

String getUrl();

/ 获取Cookie /

String getCookie();

/ 获取CSS selector /

String getSelector();

// …

}

中间关键的一点即如何获取到这个Bean,那个时候我只有一个想法:new 一个 T

事实证明,我过于天真了 🙄

但是换种思路,既然new不出来,那我就返回一下吧,于是代码出炉了~

public interface SpiderBeansHandle {

/

  • 获取Url

*/

String getUrl();

/

  • 获取Cookie

*/

String getCookie();

/*

  • 获取CSS selector

*/

String getSelector();

/*

  • 解析Element
  • @param element element

*/

T parseElement(Element element);

/*

  • Get Beans
  • @param handle Bean对象 | handle对象

  • @param Bean类型
  • @return List

*/

static List getBeans(SpiderBeansHandle handle) {

List list = new ArrayList<>();

List elements = SpiderUtils.getElementWithCookie(handle.getUrl(), handle.getSelector(), handle.getCookie());

for (Element element : elements) {

T bean = handle.parseElement(element);

if (bean != null) {

list.add(bean);

}//加入Java开发交流君样:一起吹水聊天

}

return list;

}

}

关键一步就在于:

/*

  • 解析Element
  • @param element element

*/

T parseElement(Element element);

那么这个小技巧有什么用呢?仔细看会不会觉得它像一种设计模式的变形体?没错!真相只有一个:模板方法模式

我需要一个处理爬虫的通用接口,因为简单爬虫无非就是拿到url然后请求,解析细节封装到自身的Bean里,然后获取一个列表,那么在开发业务代码的时候类似,肯定有某些场景和需求具有高度的一致性,那么使用这种设计方案即可大大的减少重复代码~

方法:你到底想干嘛?

咱们在写代码的时候有没有遇到过这种问题?写了一个工具类方法,但是功能又过于单一,虽说单一原则好吧,但是一个小逻辑写一堆方法,总感觉不得劲,如何解决咧?

Java8提供的函数式编程即可帮我们一定程度上解决这种问题,如:

// 写一个获取文件列表,且判断是否为txt结尾的工具类方法,新手会这么写

public static File getFileWithTxt(String path) throws IOException {

File file = new File(path);

if (!file.exists()) {

throw new IOException(“File is not exist.”);

}

if (file.getName().endsWith(“.txt”)) {

return file;

}

return null;

}//加入Java开发交流君样:一起吹水聊天

老手一般会把 .txt 作为参数传入,但是某一天我需要判断文件大小,文件长度,甚至是文件内容的时候,我该咋办?再写N个?

最好的方案即传入 Predicate 谓词,让调用者自定义处理逻辑,然后再把最常用的逻辑基于该方法复写一下,拓展性Max!代码如下:

/*

  • 文件夹谓词匹配
  • @param file 文件
  • @param predicate 谓词匹配
  • @return List
  • @throws IOException IOException

*/

public static List listFilesInDirWithFilter(File file, Predicate predicate) throws IOException {

if (!file.exists()) {

throw new IOException(“File is not exist.”);

}

List fileList = new ArrayList<>();

if (file.isDirectory()) {

File[] files = file.listFiles();

for (File f : Objects.requireNonNull(files)) {

fileList.addAll(listFilesInDirWithFilter(f, predicate));

总结

以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!

下面给大家分享下我的面试大全资料

  • 第一份是我的后端JAVA面试大全

image.png

后端JAVA面试大全

  • 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理

字节二面拜倒在“数据库”脚下,闭关修炼半个月,我还有机会吗?

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

  • 第三份是Spring全家桶资料

字节二面拜倒在“数据库”脚下,闭关修炼半个月,我还有机会吗?

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

记+算法+JVM+JAVA核心知识整理

[外链图片转存中…(img-Pabx4IUb-60)]

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

  • 第三份是Spring全家桶资料

[外链图片转存中…(img-XlHm3egF-60)]

MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

小讯
上一篇 2025-01-07 15:32
下一篇 2025-02-26 11:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/57509.html