Sefa Demirtaş

Sefa Demirtaş

#java

Backend Mülakat Java

Backend Mülakat Java
0 views
5 min read
#java
javaSpring

Java

  1. NodeJS yada java ile https://raw.githubusercontent.com/bilalozdemir/tr-word-list/master/files/words.json buradaki listede bulunan kelimeleri tamamen random kullanarak 4gb büyüklüğünde bir txt dosyası oluştur
  2. 4GB büyüklüğündeki dosyada en çok geçen 10 kelimeyi bul. Bu adımda kelimenin karakter sayısı 4'ten büyük çok sık kullanılan bağlaçları kolayca filtrelemiş olur.
terminal

           Sıra          Kelime   Tekrar Sayısı
             1         durumu           3597683
             2          kimse           2978002
             3     kullanılan           2559100
             4          olmak           2294841
             5          etmek           2231271
             6       bulunmak           1782450
             7         olarak           1527319
             8      anlamında           1335877
             9        olmayan           1308213
            10         duruma           1256157

2023-10-02T12:04:32.615+03:00  INFO 2489 --- [           main] c.t.worldlist.controller.WordController  : Toplam Okuma Yazma Geçen Süre :0 saat 8 dk 33 sn tamamlandı.
Proje Terminal Çıktısı

Interface WordService

WordSevice.java
import java.util.List;

import com.tugsef.worldlist.entities.Word;

public interface WordService {

	List<Word> allWord();

	void startWordTxt();

	void wordsDesc();

}
Interface WordService

Class WordManager

WordManager.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tugsef.worldlist.business.abstracts.WordService;
import com.tugsef.worldlist.business.rules.WordBusinesRules;
import com.tugsef.worldlist.entities.Word;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
public class WordManager implements WordService {

	private Logger logger = LoggerFactory.getLogger(WordManager.class);

	private WordBusinesRules businesRules = new WordBusinesRules();

	private Random random = new Random();

	@Override
	public List<Word> allWord() {
		ObjectMapper objectMapper = new ObjectMapper();
		List<Word> worList = null;
		try {
			worList = objectMapper.readValue(new File("wordList.json"), new TypeReference<List<Word>>() {
			});

			logger.info("Created wordlist size: " + worList.size());
		} catch (IOException e) {
			logger.info(WordManager.class.getName() + e);

		}

		return worList;
	}

	@Override
	public void startWordTxt() {

		String filePathTxt = "wordList.txt";
		List<Word> words = allWord();
		int randomWord = random.nextInt(words.size() - 1);

		long startTime = System.currentTimeMillis();
		long maksimumBoyut = 4294967296L;
		try {
			File filePath = new File(filePathTxt);

			if (!filePath.exists()) {
				filePath.createNewFile();
				logger.info("Created file: " + filePathTxt);
			}

			FileWriter fileWriter = new FileWriter(filePath, true);
			BufferedWriter writer = new BufferedWriter(fileWriter);

			long writteSize = 0;
			logger.info("Random ilk değer atandı(index): " + randomWord + " dosya yazılıyor...");
			while (writteSize < maksimumBoyut) {
				writer.write(words.get(randomWord) + "\n");
				writteSize = filePath.length();
				randomWord = random.nextInt(words.size() - 1);
			}
			logger.info("Random olarak değerler dosya ya yazıldı(İlk değer): " + "(" + words.get(randomWord) + ")");
			writer.close();
			long endTime = System.currentTimeMillis();
			float fileSize = filePath.length() / (1024 * 1024 * 1024);
			logger.info(fileSize + " GB dosya oluşturuldu. " + (endTime - startTime) / 1000 / 60 / 60 + " saat "
					+ (endTime - startTime) / 1000 / 60 + " dk " + ((endTime - startTime) / 1000) % 60
					+ " sn tamamlandı.");
		} catch (IOException e) {
			logger.info(WordManager.class.getName() + e);
		}

	}

	@Override
	public void wordsDesc() {
		Map<String, Integer> wordCounts = null;
		List<String> wordAll = null;
		try {
			long startTime = System.currentTimeMillis();
			wordCounts = new TreeMap<>();
			BufferedReader reader = new BufferedReader(new FileReader("wordList.txt"));
			String line;
			while ((line = reader.readLine()) != null) {
				String[] words = line.split("\\s+");
				wordAll = new ArrayList<String>();

				for (String word : words) {
					word = word.replaceAll("[.,=:;()-]", "");
					if (word.length() > 4)
						wordAll.add(word);

				}
				for (String word : wordAll) {
					word = word.toLowerCase();
					wordCounts.put(word, wordCounts.getOrDefault(word, 0) + 1);
				}

			}

			reader.close();
			long endTime = System.currentTimeMillis();
			logger.info("En çok kullanılan en çok kelimeler bulundu." + (endTime - startTime) / 1000 / 60 / 60
					+ " saat " + (endTime - startTime) / 1000 / 60 + " dk " + ((endTime - startTime) / 1000) % 60
					+ " sn tamamlandı.");
			this.businesRules.sortWordAll(wordCounts);

		} catch (IOException e) {
			logger.info(WordManager.class.getName() + e);
		}

	}

}
Class WordManager

Class WordBusinesRules

WordBusinesRules.java

@AllArgsConstructor
public class WordBusinesRules {

	public void sortWordAll(Map<String, Integer> wordCounts) {

		Formatter fmt = new Formatter();

		List<Map.Entry<String, Integer>> list = new ArrayList<>(wordCounts.entrySet());
		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
			@Override
			public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
				return o2.getValue().compareTo(o1.getValue());
			}
		});

		fmt.format("%15s  %15s\n", "Kelime", "Tekrar Sayısı");
		 list.stream().limit(10).forEach(entry -> {
				fmt.format("%14s  %17s\n", entry.getKey(), entry.getValue());
		 });;

		System.out.println(fmt);



	}

}

Class WordController

WordController.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;

import com.tugsef.worldlist.business.abstracts.WordService;
import com.tugsef.worldlist.business.concretes.WordManager;

import lombok.NoArgsConstructor;

@Controller
@NoArgsConstructor
public class WordController {

	private WordService wordService = new WordManager();
	private Logger logger = LoggerFactory.getLogger(WordController.class);

	public void start() {
		long startTime = System.currentTimeMillis();
		this.wordService.startWordTxt();
		this.wordService.wordsDesc();
		long endTime = System.currentTimeMillis();
		logger.info("Toplam Okuma Yazma Geçen Süre :" + (endTime - startTime) / 1000 / 60 / 60 + " saat "
				+ (endTime - startTime) / 1000 / 60 + " dk " + ((endTime - startTime) / 1000) % 60 + " sn tamamlandı.");
	}

}

Class Word

Word.java
import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Word {

	private String word;
	private List<String> meanings;

	@Override
	public String toString() {
		String meaning = "";

		for (String string : meanings) {
			meaning += string + ". ";
		}
		return word + " : " + meaning;
	}
}

Class WorldListApplication

WorldListApplication.java

package com.tugsef.worldlist;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.tugsef.worldlist.controller.WordController;
ƒ
@SpringBootApplication
public class WorldListApplication {

	public static void main(String[] args) {
		SpringApplication.run(WorldListApplication.class, args);
		WordController controller = new WordController();
		controller.start();

	}

}