
Test4Engine 1z1-830 dumps & Java SE Sure Practice with 85 Questions
New 1z1-830 Exam Questions| Real 1z1-830 Dumps
NEW QUESTION # 16
Which of the following doesnotexist?
- A. DoubleSupplier
- B. They all exist.
- C. LongSupplier
- D. Supplier<T>
- E. BooleanSupplier
- F. BiSupplier<T, U, R>
Answer: F
Explanation:
1. Understanding Supplier Functional Interfaces
* The Supplier<T> interface is part of java.util.function and provides valueswithout taking any arguments.
* Java also provides primitive specializations of Supplier<T>:
* BooleanSupplier# Returns a boolean. Exists
* DoubleSupplier# Returns a double. Exists
* LongSupplier# Returns a long. Exists
* Supplier<T># Returns a generic T. Exists
2. What about BiSupplier<T, U, R>?
* There is no BiSupplier<T, U, R> in Java.
* In Java, suppliers donot take arguments, so abi-supplierdoes not exist.
* If you need a function thattakes two arguments and returns a value, use BiFunction<T, U, R>.
Thus, the correct answer is:BiSupplier<T, U, R> does not exist.
References:
* Java SE 21 - Supplier<T>
* Java SE 21 - Functional Interfaces
NEW QUESTION # 17
Given:
java
int post = 5;
int pre = 5;
int postResult = post++ + 10;
int preResult = ++pre + 10;
System.out.println("postResult: " + postResult +
", preResult: " + preResult +
", Final value of post: " + post +
", Final value of pre: " + pre);
What is printed?
- A. postResult: 15, preResult: 16, Final value of post: 5, Final value of pre: 6
- B. postResult: 15, preResult: 16, Final value of post: 6, Final value of pre: 6
- C. postResult: 16, preResult: 15, Final value of post: 6, Final value of pre: 5
- D. postResult: 16, preResult: 16, Final value of post: 6, Final value of pre: 6
Answer: B
Explanation:
* Understanding post++ (Post-increment)
* post++uses the value first, then increments it.
* postResult = post++ + 10;
* post starts as 5.
* post++ returns 5, then post is incremented to 6.
* postResult = 5 + 10 = 15.
* Final value of post after this line is 6.
* Understanding ++pre (Pre-increment)
* ++preincrements the value first, then uses it.
* preResult = ++pre + 10;
* pre starts as 5.
* ++pre increments pre to 6, then returns 6.
* preResult = 6 + 10 = 16.
* Final value of pre after this line is 6.
Thus, the final output is:
yaml
postResult: 15, preResult: 16, Final value of post: 6, Final value of pre: 6 References:
* Java SE 21 - Operators and Expressions
* Java SE 21 - Arithmetic Operators
NEW QUESTION # 18
What do the following print?
java
import java.time.Duration;
public class DividedDuration {
public static void main(String[] args) {
var day = Duration.ofDays(2);
System.out.print(day.dividedBy(8));
}
}
- A. PT6H
- B. PT0D
- C. It throws an exception
- D. PT0H
- E. Compilation fails
Answer: A
Explanation:
In this code, a Duration object day is created representing a duration of 2 days using the Duration.ofDays(2) method. The dividedBy(long divisor) method is then called on this Duration object with the argument 8.
The dividedBy(long divisor) method returns a copy of the original Duration divided by the specified value. In this case, dividing 2 days by 8 results in a duration of 0.25 days. In the ISO-8601 duration format used by Java's Duration class, this is represented as PT6H, which stands for a period of 6 hours.
Therefore, the output of the System.out.print statement is PT6H.
NEW QUESTION # 19
Which of the following statements is correct about a final class?
- A. It cannot be extended by any other class.
- B. The final keyword in its declaration must go right before the class keyword.
- C. It must contain at least a final method.
- D. It cannot extend another class.
- E. It cannot implement any interface.
Answer: A
Explanation:
In Java, the final keyword can be applied to classes, methods, and variables to impose certain restrictions.
Final Classes:
* Definition:A class declared with the final keyword is known as a final class.
* Purpose:Declaring a class as final prevents it from being subclassed. This is useful when you want to ensure that the class's implementation remains unchanged and cannot be extended or modified through inheritance.
Option Evaluations:
* A. The final keyword in its declaration must go right before the class keyword.
* This is correct. The syntax for declaring a final class is:
java
public final class ClassName {
// class body
}
* However, this statement is about syntax rather than the core characteristic of a final class.
* B. It must contain at least a final method.
* Incorrect. A final class can have zero or more methods, and none of them are required to be declared as final. The final keyword at the class level prevents inheritance, regardless of the methods' finality.
* C. It cannot be extended by any other class.
* Correct. The primary characteristic of a final class is that it cannot be subclassed. Attempting to do so will result in a compilation error.
* D. It cannot implement any interface.
* Incorrect. A final class can implement interfaces. Declaring a class as final restricts inheritance but does not prevent the class from implementing interfaces.
* E. It cannot extend another class.
* Incorrect. A final class can extend another class. The final keyword prevents the class from being subclassed but does not prevent it from being a subclass itself.
Therefore, the correct statement about a final class is option C: "It cannot be extended by any other class."
NEW QUESTION # 20
Given:
java
interface A {
default void ma() {
}
}
interface B extends A {
static void mb() {
}
}
interface C extends B {
void ma();
void mc();
}
interface D extends C {
void md();
}
interface E extends D {
default void ma() {
}
default void mb() {
}
default void mc() {
}
}
Which interface can be the target of a lambda expression?
- A. A
- B. B
- C. None of the above
- D. C
- E. E
- F. D
Answer: C
Explanation:
In Java, a lambda expression can be used where a target type is a functional interface. A functional interface is an interface that contains exactly one abstract method. This concept is also known as a Single Abstract Method (SAM) type.
Analyzing each interface:
* Interface A: Contains a single default method ma(). Since default methods are not abstract, A has no abstract methods.
* Interface B: Extends A and adds a static method mb(). Static methods are also not abstract, so B has no abstract methods.
* Interface C: Extends B and declares two abstract methods: ma() (which overrides the default method from A) and mc(). Therefore, C has two abstract methods.
* Interface D: Extends C and adds another abstract method md(). Thus, D has three abstract methods.
* Interface E: Extends D and provides default implementations for ma(), mb(), and mc(). However, it does not provide an implementation for md(), leaving it as the only abstract method in E.
For an interface to be a functional interface, it must have exactly one abstract method. In this case, E has one abstract method (md()), so it qualifies as a functional interface. However, the question asks which interface can be the target of a lambda expression. Since E is a functional interface, it can be the target of a lambda expression.
Therefore, the correct answer is D (E).
NEW QUESTION # 21
What does the following code print?
java
import java.util.stream.Stream;
public class StreamReduce {
public static void main(String[] args) {
Stream<String> stream = Stream.of("J", "a", "v", "a");
System.out.print(stream.reduce(String::concat));
}
}
- A. Optional[Java]
- B. Compilation fails
- C. null
- D. Java
Answer: A
Explanation:
In this code, a Stream of String elements is created containing the characters "J", "a", "v", and "a". The reduce method is then used with String::concat as the accumulator function.
The reduce method with a single BinaryOperator parameter performs a reduction on the elements of the stream, using an associative accumulation function, and returns an Optional describing the reduced value, if any. In this case, it concatenates the strings in the stream.
Since the stream contains elements, the reduction operation concatenates them to form the string "Java". The result is wrapped in an Optional, resulting in Optional[Java]. The print statement outputs this Optional object, displaying Optional[Java].
NEW QUESTION # 22
What do the following print?
java
public class Main {
int instanceVar = staticVar;
static int staticVar = 666;
public static void main(String args[]) {
System.out.printf("%d %d", new Main().instanceVar, staticVar);
}
static {
staticVar = 42;
}
}
- A. Compilation fails
- B. 666 42
- C. 42 42
- D. 666 666
Answer: C
Explanation:
In this code, the class Main contains both an instance variable instanceVar and a static variable staticVar. The sequence of initialization and execution is as follows:
* Static Variable Initialization:
* staticVar is declared and initialized to 666.
* Static Block Execution:
* The static block executes, updating staticVar to 42.
* Instance Variable Initialization:
* When a new instance of Main is created, instanceVar is initialized to the current value of staticVar, which is 42.
* main Method Execution:
* The main method creates a new instance of Main and prints the values of instanceVar and staticVar.
Therefore, the output of the program is 42 42.
NEW QUESTION # 23
Given:
java
public class OuterClass {
String outerField = "Outer field";
class InnerClass {
void accessMembers() {
System.out.println(outerField);
}
}
public static void main(String[] args) {
System.out.println("Inner class:");
System.out.println("------------");
OuterClass outerObject = new OuterClass();
InnerClass innerObject = new InnerClass(); // n1
innerObject.accessMembers(); // n2
}
}
What is printed?
- A. Nothing
- B. markdown
Inner class:
------------
Outer field - C. An exception is thrown at runtime.
- D. Compilation fails at line n2.
- E. Compilation fails at line n1.
Answer: E
Explanation:
* Understanding Inner Classes in Java
* Aninner class (non-static nested class)requires an instance of the outer classbefore it can be instantiated.
* Incorrect instantiationof the inner class at n1:
java
InnerClass innerObject = new InnerClass(); // Compilation error
* Since InnerClass is anon-staticinner class, itmust be created from an instance of OuterClass.
* Correct Way to Instantiate the Inner Class
java
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass(); // Correct
* Thiscorrectly associatesthe inner class with an instance of OuterClass.
* Why Does Compilation Fail?
* The error occurs atline n1because InnerClass is beinginstantiated incorrectly.
Thus, the correct answer is:Compilation fails at line n1.
References:
* Java SE 21 - Nested and Inner Classes
* Java SE 21 - Accessing Outer Class Members
NEW QUESTION # 24
Given:
java
StringBuffer us = new StringBuffer("US");
StringBuffer uk = new StringBuffer("UK");
Stream<StringBuffer> stream = Stream.of(us, uk);
String output = stream.collect(Collectors.joining("-", "=", ""));
System.out.println(output);
What is the given code fragment's output?
- A. Compilation fails.
- B. An exception is thrown.
- C. -US=UK
- D. US=UK
- E. =US-UK
- F. US-UK
Answer: E
Explanation:
In this code, two StringBuffer objects, us and uk, are created with the values "US" and "UK", respectively. A stream is then created from these objects using Stream.of(us, uk).
The collect method is used with Collectors.joining("-", "=", ""). The joining collector concatenates the elements of the stream into a single String with the following parameters:
* Delimiter ("-"):Inserted between each element.
* Prefix ("="):Inserted at the beginning of the result.
* Suffix (""):Inserted at the end of the result.
Therefore, the elements "US" and "UK" are concatenated with "-" between them, resulting in "US-UK". The prefix "=" is added at the beginning, resulting in the final output =US-UK.
NEW QUESTION # 25
Given:
java
public class ThisCalls {
public ThisCalls() {
this(true);
}
public ThisCalls(boolean flag) {
this();
}
}
Which statement is correct?
- A. It does not compile.
- B. It throws an exception at runtime.
- C. It compiles.
Answer: A
Explanation:
In the provided code, the class ThisCalls has two constructors:
* No-Argument Constructor (ThisCalls()):
* This constructor calls the boolean constructor with this(true);.
* Boolean Constructor (ThisCalls(boolean flag)):
* This constructor attempts to call the no-argument constructor with this();.
This setup creates a circular call between the two constructors:
* The no-argument constructor calls the boolean constructor.
* The boolean constructor calls the no-argument constructor.
Such a circular constructor invocation leads to a compile-time error in Java, specifically "recursiveconstructor invocation." The Java Language Specification (JLS) states:
"It is a compile-time error for a constructor to directly or indirectly invoke itself through a series of one or more explicit constructor invocations involving this." Therefore, the code will not compile due to this recursive constructor invocation.
NEW QUESTION # 26
Given:
java
import java.io.*;
class A implements Serializable {
int number = 1;
}
class B implements Serializable {
int number = 2;
}
public class Test {
public static void main(String[] args) throws Exception {
File file = new File("o.ser");
A a = new A();
var oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(a);
oos.close();
var ois = new ObjectInputStream(new FileInputStream(file));
B b = (B) ois.readObject();
ois.close();
System.out.println(b.number);
}
}
What is the given program's output?
- A. ClassCastException
- B. Compilation fails
- C. NotSerializableException
- D. 0
- E. 1
Answer: A
Explanation:
In this program, we have two classes, A and B, both implementing the Serializable interface, and a Test class with the main method.
Program Flow:
* Serialization:
* An instance of class A is created and assigned to the variable a.
* An ObjectOutputStream is created to write to the file "o.ser".
* The object a is serialized and written to the file.
* The ObjectOutputStream is closed.
* Deserialization:
* An ObjectInputStream is created to read from the file "o.ser".
* The program attempts to read an object from the file and cast it to an instance of class B.
* The ObjectInputStream is closed.
Analysis:
* Serialization Process:
* The object a is an instance of class A and is serialized into the file "o.ser".
* Deserialization Process:
* When deserializing, the program reads the object from the file and attempts to cast it to class B.
* However, the object in the file is of type A, not B.
* Since A and B are distinct classes with no inheritance relationship, casting an A instance to B is invalid.
Exception Details:
* Attempting to cast an object of type A to type B results in a ClassCastException.
* The exception message would be similar to:
pgsql
Exception in thread "main" java.lang.ClassCastException: class A cannot be cast to class B Conclusion:
The program compiles successfully but throws a ClassCastException at runtime when it attempts to cast the deserialized object to class B.
NEW QUESTION # 27
Given:
java
Runnable task1 = () -> System.out.println("Executing Task-1");
Callable<String> task2 = () -> {
System.out.println("Executing Task-2");
return "Task-2 Finish.";
};
ExecutorService execService = Executors.newCachedThreadPool();
// INSERT CODE HERE
execService.awaitTermination(3, TimeUnit.SECONDS);
execService.shutdownNow();
Which of the following statements, inserted in the code above, printsboth:
"Executing Task-2" and "Executing Task-1"?
- A. execService.call(task2);
- B. execService.run(task2);
- C. execService.run(task1);
- D. execService.call(task1);
- E. execService.submit(task1);
- F. execService.execute(task1);
- G. execService.submit(task2);
- H. execService.execute(task2);
Answer: E,G
Explanation:
* Understanding ExecutorService Methods
* execute(Runnable command)
* Runs the task but only supports Runnable (not Callable).
* #execService.execute(task2); fails because task2 is Callable<String>.
* submit(Runnable task)
* Submits a Runnable task for execution.
* execService.submit(task1); executes "Executing Task-1".
* submit(Callable<T> task)
* Submits a Callable<T> task for execution.
* execService.submit(task2); executes "Executing Task-2".
* call() Does Not Exist in ExecutorService
* #execService.call(task1); and execService.call(task2); are invalid.
* run() Does Not Exist in ExecutorService
* #execService.run(task1); and execService.run(task2); are invalid.
* Correct Code to Print Both Messages:
java
execService.submit(task1);
execService.submit(task2);
Thus, the correct answer is:execService.submit(task1); execService.submit(task2); References:
* Java SE 21 - ExecutorService
* Java SE 21 - Callable and Runnable
NEW QUESTION # 28
Given:
java
Stream<String> strings = Stream.of("United", "States");
BinaryOperator<String> operator = (s1, s2) -> s1.concat(s2.toUpperCase()); String result = strings.reduce("-", operator); System.out.println(result); What is the output of this code fragment?
- A. -UnitedStates
- B. United-States
- C. United-STATES
- D. -UnitedSTATES
- E. UNITED-STATES
- F. UnitedStates
- G. -UNITEDSTATES
Answer: D
Explanation:
In this code, a Stream of String elements is created containing "United" and "States". A BinaryOperator<String> named operator is defined to concatenate the first string (s1) with the uppercase version of the second string (s2). The reduce method is then used with "-" as the identity value and operator as the accumulator.
The reduce method processes the elements of the stream as follows:
* Initial Identity Value: "-"
* First Iteration:
* Accumulator Operation: "-".concat("United".toUpperCase())
* Result: "-UNITED"
* Second Iteration:
* Accumulator Operation: "-UNITED".concat("States".toUpperCase())
* Result: "-UNITEDSTATES"
Therefore, the final result stored in result is "-UNITEDSTATES", and the output of theSystem.out.println (result); statement is -UNITEDSTATES.
NEW QUESTION # 29
Given:
java
Integer frenchRevolution = 1789;
Object o1 = new String("1789");
Object o2 = frenchRevolution;
frenchRevolution = null;
Object o3 = o2.toString();
System.out.println(o1.equals(o3));
What is printed?
- A. Compilation fails.
- B. false
- C. A ClassCastException is thrown.
- D. A NullPointerException is thrown.
- E. true
Answer: E
Explanation:
* Understanding Variable Assignments
java
Integer frenchRevolution = 1789;
Object o1 = new String("1789");
Object o2 = frenchRevolution;
frenchRevolution = null;
* frenchRevolution is an Integer with value1789.
* o1 is aString with value "1789".
* o2 storesa reference to frenchRevolution, which is an Integer (1789).
* frenchRevolution = null;only nullifies the reference, but o2 still holds the Integer 1789.
* Calling toString() on o2
java
Object o3 = o2.toString();
* o2 refers to an Integer (1789).
* Integer.toString() returns theString representation "1789".
* o3 is assigned "1789" (String).
* Evaluating o1.equals(o3)
java
System.out.println(o1.equals(o3));
* o1.equals(o3) isequivalent to:
java
"1789".equals("1789")
* Since both areequal strings, the output is:
arduino
true
Thus, the correct answer is:true
References:
* Java SE 21 - Integer.toString()
* Java SE 21 - String.equals()
NEW QUESTION # 30
Given:
java
System.out.print(Boolean.logicalAnd(1 == 1, 2 < 1));
System.out.print(Boolean.logicalOr(1 == 1, 2 < 1));
System.out.print(Boolean.logicalXor(1 == 1, 2 < 1));
What is printed?
- A. truetruefalse
- B. truetruetrue
- C. truefalsetrue
- D. Compilation fails
- E. falsetruetrue
Answer: C
Explanation:
In this code, three static methods from the Boolean class are used: logicalAnd, logicalOr, and logicalXor.
Each method takes two boolean arguments and returns a boolean result based on the respective logical operation.
Evaluation of Each Statement:
* Boolean.logicalAnd(1 == 1, 2 < 1)
* Operands:
* 1 == 1 evaluates to true.
* 2 < 1 evaluates to false.
* Operation:
* Boolean.logicalAnd(true, false) performs a logical AND operation.
* The result is false because both operands must be true for the AND operation to return true.
* Output:
* System.out.print(false); prints false.
* Boolean.logicalOr(1 == 1, 2 < 1)
* Operands:
* 1 == 1 evaluates to true.
* 2 < 1 evaluates to false.
* Operation:
* Boolean.logicalOr(true, false) performs a logical OR operation.
* The result is true because at least one operand is true.
* Output:
* System.out.print(true); prints true.
* Boolean.logicalXor(1 == 1, 2 < 1)
* Operands:
* 1 == 1 evaluates to true.
* 2 < 1 evaluates to false.
* Operation:
* Boolean.logicalXor(true, false) performs a logical XOR (exclusive OR) operation.
* The result is true because exactly one operand is true.
* Output:
* System.out.print(true); prints true.
Combined Output:
Combining the outputs from each statement, the final printed result is:
nginx
falsetruetrue
NEW QUESTION # 31
Given:
java
LocalDate localDate = LocalDate.of(2020, 8, 8);
Date date = java.sql.Date.valueOf(localDate);
DateFormat formatter = new SimpleDateFormat(/* pattern */);
String output = formatter.format(date);
System.out.println(output);
It's known that the given code prints out "August 08".
Which of the following should be inserted as the pattern?
- A. MMMM dd
- B. MM d
- C. MMM dd
- D. MM dd
Answer: A
Explanation:
To achieve the output "August 08", the SimpleDateFormat pattern must format the month in its full textual form and the day as a two-digit number.
* Pattern Analysis:
* MMMM: Represents the full name of the month (e.g., "August").
* dd: Represents the day of the month as a two-digit number, with leading zeros if necessary (e.g.,
"08").
Therefore, the correct pattern to produce the desired output is MMMM dd.
* Option Evaluations:
* A. MM d: Formats the month as a two-digit number and the day as a single or two-digit number without leading zeros. For example, "08 8".
* B. MM dd: Formats the month and day both as two-digit numbers. For example, "08 08".
* C. MMMM dd: Formats the month as its full name and the day as a two-digit number. For example, "August 08".
* D. MMM dd: Formats the month as its abbreviated name and the day as a two-digit number. For example, "Aug 08".
Thus, option C (MMMM dd) is the correct choice to match the output "August 08".
NEW QUESTION # 32
Given:
java
StringBuilder result = Stream.of("a", "b")
.collect(
() -> new StringBuilder("c"),
StringBuilder::append,
(a, b) -> b.append(a)
);
System.out.println(result);
What is the output of the given code fragment?
- A. cacb
- B. abc
- C. cbca
- D. bac
- E. bca
- F. cba
- G. acb
Answer: F
Explanation:
In this code, a Stream containing the elements "a" and "b" is processed using the collect method. The collect method is a terminal operation that performs a mutable reduction on the elements of the stream using a Collector. In this case, custom implementations for the supplier, accumulator, and combiner are provided.
Components of the collect Method:
* Supplier:
* () -> new StringBuilder("c")
* This supplier creates a new StringBuilder initialized with the string "c".
* Accumulator:
* StringBuilder::append
* This accumulator appends each element of the stream to the StringBuilder.
* Combiner:
* (a, b) -> b.append(a)
* This combiner is used in parallel stream operations to merge two StringBuilder instances. It appends the contents of a to b.
Execution Flow:
* Stream Elements:"a", "b"
* Initial StringBuilder:"c"
* Accumulation:
* The first element "a" is appended to "c", resulting in "ca".
* The second element "b" is appended to "ca", resulting in "cab".
* Combiner:
* In this sequential stream, the combiner is not utilized. The combiner is primarily used in parallel streams to merge partial results.
Final Result:
The StringBuilder contains "cab". Therefore, the output of the program is:
nginx
cab
NEW QUESTION # 33
Given:
java
var lyrics = """
Quand il me prend dans ses bras
Qu'il me parle tout bas
Je vois la vie en rose
""";
for ( int i = 0, int j = 3; i < j; i++ ) {
System.out.println( lyrics.lines()
.toList()
.get( i ) );
}
What is printed?
- A. Nothing
- B. vbnet
Quand il me prend dans ses bras
Qu'il me parle tout bas
Je vois la vie en rose - C. An exception is thrown at runtime.
- D. Compilation fails.
Answer: D
Explanation:
* Error in for Loop Initialization
* The initialization part of a for loopcannot declare multiple variables with different types in a single statement.
* Error:
java
for (int i = 0, int j = 3; i < j; i++) {
* Fix:Declare variables separately:
java
for (int i = 0, j = 3; i < j; i++) {
* lyrics.lines() in Java 21
* The lines() method of String returns aStream<String>, splitting the string by line breaks.
* Calling .toList() on a streamconverts it to a list.
* Valid Code After Fixing the Loop:
java
var lyrics = """
Quand il me prend dans ses bras
Qu'il me parle tout bas
Je vois la vie en rose
""";
for (int i = 0, j = 3; i < j; i++) {
System.out.println(lyrics.lines()
toList()
get(i));
}
* Expected Output After Fixing:
vbnet
Quand il me prend dans ses bras
Qu'il me parle tout bas
Je vois la vie en rose
Thus, the correct answer is:Compilation fails.
References:
* Java SE 21 - String.lines()
* Java SE 21 - for Statement Rules
NEW QUESTION # 34
Given:
java
public static void main(String[] args) {
try {
throw new IOException();
} catch (IOException e) {
throw new RuntimeException();
} finally {
throw new ArithmeticException();
}
}
What is the output?
- A. Compilation fails
- B. RuntimeException
- C. IOException
- D. ArithmeticException
Answer: D
Explanation:
In this code, the try block throws an IOException. The catch block catches this exception and throws a new RuntimeException. Regardless of exceptions thrown in the try or catch blocks, the finally block is always executed. In this case, the finally block throws an ArithmeticException.
When an exception is thrown in a finally block, it overrides any previous exceptions that were thrown in the try or catch blocks. Therefore, the ArithmeticException thrown in the finally block is the exception that propagates out of the method. As a result, the program terminates with an ArithmeticException.
NEW QUESTION # 35
......
1z1-830 Braindumps – 1z1-830 Questions to Get Better Grades: https://www.test4engine.com/1z1-830_exam-latest-braindumps.html
Get New 1z1-830 Certification – Valid Exam Dumps Questions: https://drive.google.com/open?id=1eRzcYqL9O1Y2q-HBtH3PGyUuntVT5RnH