

- Главная
- Каталог
- Интернет технологии
- Java | Фишки и трюки

Java | Фишки и трюки
Аудитория канала - начинающие или опытные Java программисты. Канал о разработке приложений на Java, в том числе написание бэкенд и web-приложений. Рассматриваются фишки и трюки при программировании на Java.
Статистика канала
Полная статистикаchevron_right
    
        implementation("io.opentelemetry:opentelemetry-api:1.31.0")
implementation("io.opentelemetry:opentelemetry-sdk:1.31.0")
implementation("io.opentelemetry:opentelemetry-exporter-otlp:1.31.0"){}
    
    
        SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
    .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().build()).build())
    .build();
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
    .setTracerProvider(tracerProvider)
    .build();{}
    
    
        Tracer tracer = openTelemetry.getTracer("com.trading.app");
try (Scope scope = tracer.spanBuilder("DB Query").startScopedSpan()) {
    db.execute("SELECT * FROM orders");
}{}
    
    
        Meter meter = openTelemetry.getMeter("com.trading.metrics");
LongCounter reqCount = meter.counterBuilder("http.requests.total").build();
reqCount.add(1, Attributes.of(stringKey("endpoint"), "/api/trade"));{}
    
    
        OtlpGrpcMetricExporter exporter = OtlpGrpcMetricExporter.builder()
    .setEndpoint("http://localhost:4317")
    .build();{}
    
    
        logger.info("order_created", kv("user", userId), kv("amount", amount));{}
    
    
        java -javaagent:opentelemetry-javaagent.jar \
  -Dotel.service.name=order-service \
  -Dotel.exporter.otlp.endpoint=http://localhost:4317 \
  -jar app.jar{}
    
    
        receivers:
  otlp:
    protocols:
      grpc:
      http:
exporters:
  prometheus:
  logging:
  jaeger:
    endpoint: "localhost:14250"
service:
  pipelines:
    traces: { receivers: [otlp], exporters: [jaeger, logging] }
    metrics: { receivers: [otlp], exporters: [prometheus] }{}
    
    
        Traces → Jaeger  
Metrics → Prometheus  
Logs → Loki  {}
    
    
        MDC.put("traceId", Span.current().getSpanContext().getTraceId());
logger.info("processing order {}", orderId);{}
    
➡️ CPU / Memory / GC Time➡️ Request latency per endpoint➡️ Top error spans per service➡️ Logs correlated by traceId
    
        try (Scope scope = tracer.spanBuilder("match_order").startScopedSpan()) {
    orderService.match(order);
}{}
    
    
        Socket socket = new Socket("api.exchange.com", 4001);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("SUBSCRIBE:BTC-USD");
System.out.println("Tick: " + in.readLine());{}
    
    
        Selector selector = Selector.open();
SocketChannel channel = SocketChannel.open(new InetSocketAddress("api.exchange.com", 8080));
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ);
while (true) {
    selector.select();
    for (SelectionKey key : selector.selectedKeys())
        ((SocketChannel) key.channel()).read(ByteBuffer.allocate(1024));
}{}
    
    
        HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT")).build();
String body = client.send(req, HttpResponse.BodyHandlers.ofString()).body();
System.out.println(body);{}
    
    
        Flux.interval(Duration.ofMillis(10))
    .flatMap(i -> fetchTick())
    .subscribe(System.out::println);{}
    
    
        ProducerRecord<String, String> tick = new ProducerRecord<>("ticks", "BTC", json);
producer.send(tick);{}
    
    
        Disruptor<Event> disruptor = new Disruptor<>(Event::new, 1024, Executors.defaultThreadFactory());
disruptor.handleEventsWith((event, seq, end) -> process(event));
disruptor.start();{}
    
    
        double pnl = 0.0;
for (int i = 0; i < prices.length; i++)
    pnl += (prices[i] - avg) * weights[i];{}
    
    
        ChronicleQueue queue = ChronicleQueue.single("trades");
ExcerptAppender appender = queue.acquireAppender();
appender.writeText("BUY BTC 1.234 @ 67900");{}
    
    
        long t1 = System.nanoTime();
client.send(request, HttpResponse.BodyHandlers.discarding());
System.out.println("Latency: " + (System.nanoTime() - t1) / 1_000_000.0 + " ms");{}
    
    
        CompletableFuture.supplyAsync(() -> fetch("exchangeA"))
    .exceptionally(e -> fetch("exchangeB"))
    .thenAccept(this::trade);{}
    
    
        JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(stream);
while (parser.nextToken() != JsonToken.END_OBJECT)
    process(parser.getCurrentName(), parser.getValueAsString());{}
    
    
        NtpV3Packet msg = new NtpV3Impl();
msg.setMode(3);
System.out.println("Offset: " + client.getTime(InetAddress.getByName("pool.ntp.org")).getOffset());{}
    
    
        implementation 'org.telegram:telegrambots:6.9.7'{}
    
    
        public class EchoBot extends TelegramLongPollingBot {
    public String getBotUsername() { return "MyJavaBot"; }
    public String getBotToken() { return "TOKEN"; }
    public void onUpdateReceived(Update u) {
        var chat = u.getMessage().getChatId().toString();
        var text = u.getMessage().getText();
        send(chat, "Ты написал: " + text);
    }
    void send(String chatId, String msg) {
        try { execute(new SendMessage(chatId, msg)); } 
        catch (Exception e) { e.printStackTrace(); }
    }
}{}
    
 
    
        var bots = new TelegramBotsApi(DefaultBotSession.class);
bots.registerBot(new EchoBot());
System.out.println("Бот в деле 🚀");{}
    
 
    
        Ты: ping  
Бот: Ты написал: ping{}
    
    
        if (text.equals("/start"))
    send(chat, "Привет! Я Java-бот 💪");
else if (text.equalsIgnoreCase("время"))
    send(chat, LocalTime.now().toString());
else
    send(chat, "Команда не понята 🤖");{}
    
    
        var markup = new InlineKeyboardMarkup();
markup.setKeyboard(List.of(List.of(
    new InlineKeyboardButton("Сказать hi").callbackData("hi")
)));
msg.setReplyMarkup(markup);{}
    
 
    
        src/
 ├── Main.java
 └── EchoBot.java
build.gradle{}
    
    
        
public class MyClass {
    private int field;
    public MyClass(int field) {
        this.field = field;
    }
    public void method() {
        // some code
    }
}
{}
    
2. Абстрактные классы (Abstract Classes)
Абстрактные классы не могут быть созданы как объекты напрямую. Они предназначены для предоставления общей функциональности, которую подклассы должны реализовать или дополнить.
    
        
public abstract class AbstractClass {
    public abstract void abstractMethod();
    public void concreteMethod() {
        // some code
    }
}
{}
    
3. Вложенные классы (Nested Classes)
Классы, объявленные внутри другого класса. Они могут быть статическими или нестатическими.
🔹 Статические вложенные классы (Static Nested Classes):
Эти классы могут быть созданы без экземпляра внешнего класса.
    
        
public class OuterClass {
    static class StaticNestedClass {
        // some code
    }
}
{}
    
🔹 Внутренние классы (Inner Classes):
Эти классы имеют доступ ко всем членам внешнего класса и создаются в контексте экземпляра внешнего класса.
    
        
public class OuterClass {
    class InnerClass {
        // some code
    }
}
{}
    
4. Локальные классы (Local Classes)
Классы, объявленные внутри метода, конструктора или блока. Они имеют доступ к финальным переменным из охватывающего метода.
    
        
public class OuterClass {
    public void method() {
        class LocalClass {
            // some code
        }
        LocalClass local = new LocalClass();
    }
}
{}
    
5. Анонимные классы (Anonymous Classes)
Классы без имени, создаваемые на месте для реализации интерфейса или наследования от класса. Часто используются для создания экземпляров интерфейсов или абстрактных классов.
    
        
public class OuterClass {
    public void method() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // some code
            }
        };
    }
}
{}
    
6. Перечисления (Enums)
Специальные классы, представляющие набор констант. Они могут содержать поля, методы и конструкторы.
    
        
public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
{}
    
7. Интерфейсы (Interfaces)
Технически не классы, но важная часть объектно-ориентированного программирования в Java. Интерфейсы определяют контракты, которые должны быть реализованы классами.
    
        
public interface MyInterface {
    void myMethod();
}
{}
    
8. Записи (Records)
Нововведение в Java 14 (в предварительном виде) и официально в Java 16. Они предоставляют компактный способ создания неизменяемых классов с полями и автоматически сгенерированными методами, такими как equals, hashCode и toString.
    
        
public record Point(int x, int y) {}{}
    
#java #classes
    
        List<String> lines = Files.readAllLines(Paths.get("data.txt"));
Map<String, Long> counts = lines.stream()
    .flatMap(line -> Arrays.stream(line.split(" ")))
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(counts);{}
    
    
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<String> stream = env.socketTextStream("localhost", 9999);
stream
    .flatMap((String line, Collector<String> out) -> {
        for (String word : line.split(" ")) out.collect(word);
    })
    .keyBy(word -> word)
    .sum(1)
    .print();
env.execute("Flink WordCount");{}
    
    
        SparkSession spark = SparkSession.builder().appName("StreamSQL").getOrCreate();
Dataset<Row> lines = spark.readStream()
    .format("socket")
    .option("host", "localhost")
    .option("port", 9999)
    .load();
Dataset<Row> words = lines.as(Encoders.STRING())
    .flatMap((FlatMapFunction<String, String>) x -> Arrays.asList(x.split(" ")).iterator(), Encoders.STRING());
words.groupBy("value").count()
    .writeStream()
    .outputMode("complete")
    .format("console")
    .start()
    .awaitTermination();{}
    
    
        Pipeline p = Pipeline.create();
p.apply(TextIO.read().from("input.txt"))
 .apply(ParDo.of(new DoFn<String, String>() {
     @ProcessElement
     public void processElement(ProcessContext c) {
         for (String word : c.element().split(" ")) c.output(word);
     }
 }))
 .apply(Count.perElement())
 .apply(TextIO.write().to("output"));
p.run().waitUntilFinish();{}
    
    
        FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("logs", new SimpleStringSchema(), props);
env.addSource(consumer)
   .map(line -> line.toUpperCase())
   .addSink(new FlinkKafkaProducer<>("processed", new SimpleStringSchema(), props));{}
    
    
        stream.keyBy(value -> value)
      .flatMap(new RichFlatMapFunction<String, Tuple2<String, Integer>>() {
          private transient ValueState<Integer> count;
          public void open(Configuration parameters) {
              count = getRuntimeContext().getState(new ValueStateDescriptor<>("count", Integer.class));
          }
          public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
              Integer current = count.value() == null ? 0 : count.value();
              count.update(current + 1);
              out.collect(Tuple2.of(value, current + 1));
          }
      });{}
    
    
        PipelineOptions options = PipelineOptionsFactory.create();
options.as(DataflowPipelineOptions.class).setRunner(DataflowRunner.class);{}
    
    
        Dataset<Row> df = spark.readStream()
    .format("kafka")
    .option("kafka.bootstrap.servers", "localhost:9092")
    .option("subscribe", "topic")
    .load();{}
    
В этом видео автор подробно объясняет концепцию полиморфизма в объектно-ориентированном программировании на примере Java. Разбирается, как один объект может иметь разные формы в зависимости от контекста, как работает динамическое связывание, как переопределять методы в наследниках и использовать ссылки на родительские типы для управления объектами.
Отзывы канала
всего 10 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Java | Фишки и трюки — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 7.3K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 20.6, количество отзывов – 10, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 2237.76 ₽, а за 82 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога









































![Размещение интеграции в Telegram. Логотип Телеграм канала "QA Jobs | Работа | Вакансии | Удалёнка [IT MATCH]" Размещение интеграции в Telegram. Логотип Телеграм канала @it_match_qa](https://telega-images.storage.yandexcloud.net/uploads/channels/avatars/000/214/528/original/thumb_140_img.png)



Комментарий